Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3032aedd authored by Don Zickus's avatar Don Zickus Committed by Greg Kroah-Hartman
Browse files

staging: unisys: Convert bus functions to pass bus_info pointer around



Most bus functions pass bus_no around and then do a lookup inside each
function to find the bus_info struct.  Instead just pass the pointer.

This prepares us for a later conversion to using visor_device.

Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
Signed-off-by: default avatarBenjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5ecbd5d4
Loading
Loading
Loading
Loading
+19 −25
Original line number Original line Diff line number Diff line
@@ -108,8 +108,8 @@ static long long bus_count; /** number of bus instances */
static long long total_devices_created;
static long long total_devices_created;
					/** ever-increasing */
					/** ever-increasing */


static void chipset_bus_create(u32 bus_no);
static void chipset_bus_create(struct visorchipset_bus_info *bus_info);
static void chipset_bus_destroy(u32 bus_no);
static void chipset_bus_destroy(struct visorchipset_bus_info *bus_info);
static void chipset_device_create(u32 bus_no, u32 dev_no);
static void chipset_device_create(u32 bus_no, u32 dev_no);
static void chipset_device_destroy(u32 bus_no, u32 dev_no);
static void chipset_device_destroy(u32 bus_no, u32 dev_no);
static void chipset_device_pause(u32 bus_no, u32 dev_no);
static void chipset_device_pause(u32 bus_no, u32 dev_no);
@@ -1331,11 +1331,11 @@ fix_vbus_dev_info(struct visor_device *visordev)
/** Create a device instance for the visor bus itself.
/** Create a device instance for the visor bus itself.
 */
 */
static struct visorbus_devdata *
static struct visorbus_devdata *
create_bus_instance(int id)
create_bus_instance(struct visorchipset_bus_info *bus_info)
{
{
	struct visorbus_devdata *rc = NULL;
	struct visorbus_devdata *rc = NULL;
	struct visorbus_devdata *devdata = NULL;
	struct visorbus_devdata *devdata = NULL;
	struct visorchipset_bus_info bus_info;
	int id = bus_info->bus_no;


	POSTCODE_LINUX_2(BUS_CREATE_ENTRY_PC, POSTCODE_SEVERITY_INFO);
	POSTCODE_LINUX_2(BUS_CREATE_ENTRY_PC, POSTCODE_SEVERITY_INFO);
	devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
	devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
@@ -1355,15 +1355,14 @@ create_bus_instance(int id)
		goto away;
		goto away;
	}
	}
	devdata->devno = id;
	devdata->devno = id;
	if ((visorchipset_get_bus_info(id, &bus_info)) &&
	if ((bus_info->chan_info.channel_addr > 0) &&
	    (bus_info.chan_info.channel_addr > 0) &&
	    (bus_info->chan_info.n_channel_bytes > 0)) {
	    (bus_info.chan_info.n_channel_bytes > 0)) {
		u64 channel_addr = bus_info->chan_info.channel_addr;
		u64 channel_addr = bus_info.chan_info.channel_addr;
		unsigned long n_channel_bytes =
		unsigned long n_channel_bytes =
				(unsigned long)
				(unsigned long)
				bus_info.chan_info.n_channel_bytes;
				bus_info->chan_info.n_channel_bytes;
		uuid_le channel_type_guid =
		uuid_le channel_type_guid =
				bus_info.chan_info.channel_type_uuid;
				bus_info->chan_info.channel_type_uuid;


		devdata->chan = visorchannel_create(channel_addr,
		devdata->chan = visorchannel_create(channel_addr,
						    n_channel_bytes,
						    n_channel_bytes,
@@ -1373,7 +1372,7 @@ create_bus_instance(int id)
			POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, channel_addr,
			POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, channel_addr,
					 POSTCODE_SEVERITY_ERR);
					 POSTCODE_SEVERITY_ERR);
		} else {
		} else {
			if (bus_info.flags.server) {
			if (bus_info->flags.server) {
				init_vbus_channel(devdata->chan);
				init_vbus_channel(devdata->chan);
			} else {
			} else {
				if (get_vbus_header_info(devdata->chan,
				if (get_vbus_header_info(devdata->chan,
@@ -1466,19 +1465,17 @@ static unsigned long test_bus_nos[MAXDEVICETEST];
static unsigned long test_dev_nos[MAXDEVICETEST];
static unsigned long test_dev_nos[MAXDEVICETEST];


static void
static void
chipset_bus_create(u32 bus_no)
chipset_bus_create(struct visorchipset_bus_info *bus_info)
{
{
	struct visorchipset_bus_info bus_info;
	struct visorbus_devdata *devdata;
	struct visorbus_devdata *devdata;
	int rc = -1;
	int rc = -1;
	u32 bus_no = bus_info->bus_no;


	POSTCODE_LINUX_3(BUS_CREATE_ENTRY_PC, bus_no, POSTCODE_SEVERITY_INFO);
	POSTCODE_LINUX_3(BUS_CREATE_ENTRY_PC, bus_no, POSTCODE_SEVERITY_INFO);
	if (!visorchipset_get_bus_info(bus_no, &bus_info))
	devdata = create_bus_instance(bus_info);
		goto away;
	devdata = create_bus_instance(bus_no);
	if (!devdata)
	if (!devdata)
		goto away;
		goto away;
	if (!visorchipset_set_bus_context(bus_no, devdata))
	if (!visorchipset_set_bus_context(bus_info, devdata))
		goto away;
		goto away;
	POSTCODE_LINUX_3(BUS_CREATE_EXIT_PC, bus_no, POSTCODE_SEVERITY_INFO);
	POSTCODE_LINUX_3(BUS_CREATE_EXIT_PC, bus_no, POSTCODE_SEVERITY_INFO);
	rc = 0;
	rc = 0;
@@ -1491,30 +1488,27 @@ chipset_bus_create(u32 bus_no)
	POSTCODE_LINUX_3(CHIPSET_INIT_SUCCESS_PC, bus_no,
	POSTCODE_LINUX_3(CHIPSET_INIT_SUCCESS_PC, bus_no,
			 POSTCODE_SEVERITY_INFO);
			 POSTCODE_SEVERITY_INFO);
	if (chipset_responders.bus_create)
	if (chipset_responders.bus_create)
		(*chipset_responders.bus_create) (bus_no, rc);
		(*chipset_responders.bus_create) (bus_info, rc);
}
}


static void
static void
chipset_bus_destroy(u32 bus_no)
chipset_bus_destroy(struct visorchipset_bus_info *bus_info)
{
{
	struct visorchipset_bus_info bus_info;
	struct visorbus_devdata *devdata;
	struct visorbus_devdata *devdata;
	int rc = -1;
	int rc = -1;


	if (!visorchipset_get_bus_info(bus_no, &bus_info))
	devdata = (struct visorbus_devdata *)(bus_info->bus_driver_context);
		goto away;
	devdata = (struct visorbus_devdata *)(bus_info.bus_driver_context);
	if (!devdata)
	if (!devdata)
		goto away;
		goto away;
	remove_bus_instance(devdata);
	remove_bus_instance(devdata);
	if (!visorchipset_set_bus_context(bus_no, NULL))
	if (!visorchipset_set_bus_context(bus_info, NULL))
		goto away;
		goto away;
	rc = 0;
	rc = 0;
away:
away:
	if (rc < 0)
	if (rc < 0)
		return;
		return;
	if (chipset_responders.bus_destroy)
	if (chipset_responders.bus_destroy)
		(*chipset_responders.bus_destroy)(bus_no, rc);
		(*chipset_responders.bus_destroy)(bus_info, rc);
}
}


static void
static void
+6 −5
Original line number Original line Diff line number Diff line
@@ -104,8 +104,8 @@ struct visorchipset_bus_info {
 *  visorchipset.)
 *  visorchipset.)
 */
 */
struct visorchipset_busdev_notifiers {
struct visorchipset_busdev_notifiers {
	void (*bus_create)(u32 bus_no);
	void (*bus_create)(struct visorchipset_bus_info *bus_info);
	void (*bus_destroy)(u32 bus_no);
	void (*bus_destroy)(struct visorchipset_bus_info *bus_info);
	void (*device_create)(u32 bus_no, u32 dev_no);
	void (*device_create)(u32 bus_no, u32 dev_no);
	void (*device_destroy)(u32 bus_no, u32 dev_no);
	void (*device_destroy)(u32 bus_no, u32 dev_no);
	void (*device_pause)(u32 bus_no, u32 dev_no);
	void (*device_pause)(u32 bus_no, u32 dev_no);
@@ -119,8 +119,8 @@ struct visorchipset_busdev_notifiers {
 *      -1 = it failed
 *      -1 = it failed
 */
 */
struct visorchipset_busdev_responders {
struct visorchipset_busdev_responders {
	void (*bus_create)(u32 bus_no, int response);
	void (*bus_create)(struct visorchipset_bus_info *p, int response);
	void (*bus_destroy)(u32 bus_no, int response);
	void (*bus_destroy)(struct visorchipset_bus_info *p, int response);
	void (*device_create)(u32 bus_no, u32 dev_no, int response);
	void (*device_create)(u32 bus_no, u32 dev_no, int response);
	void (*device_destroy)(u32 bus_no, u32 dev_no, int response);
	void (*device_destroy)(u32 bus_no, u32 dev_no, int response);
	void (*device_pause)(u32 bus_no, u32 dev_no, int response);
	void (*device_pause)(u32 bus_no, u32 dev_no, int response);
@@ -142,7 +142,8 @@ bool visorchipset_get_bus_info(u32 bus_no,
			       struct visorchipset_bus_info *bus_info);
			       struct visorchipset_bus_info *bus_info);
bool visorchipset_get_device_info(u32 bus_no, u32 dev_no,
bool visorchipset_get_device_info(u32 bus_no, u32 dev_no,
				  struct visorchipset_device_info *dev_info);
				  struct visorchipset_device_info *dev_info);
bool visorchipset_set_bus_context(u32 bus_no, void *context);
bool visorchipset_set_bus_context(struct visorchipset_bus_info *bus_info,
				  void *context);


/* visorbus init and exit functions */
/* visorbus init and exit functions */
int visorbus_init(void);
int visorbus_init(void);
+17 −22
Original line number Original line Diff line number Diff line
@@ -228,8 +228,8 @@ static void parahotplug_process_list(void);
 */
 */
static struct visorchipset_busdev_notifiers busdev_notifiers;
static struct visorchipset_busdev_notifiers busdev_notifiers;


static void bus_create_response(u32 bus_no, int response);
static void bus_create_response(struct visorchipset_bus_info *p, int response);
static void bus_destroy_response(u32 bus_no, int response);
static void bus_destroy_response(struct visorchipset_bus_info *p, int response);
static void device_create_response(u32 bus_no, u32 dev_no, int response);
static void device_create_response(u32 bus_no, u32 dev_no, int response);
static void device_destroy_response(u32 bus_no, u32 dev_no, int response);
static void device_destroy_response(u32 bus_no, u32 dev_no, int response);
static void device_resume_response(u32 bus_no, u32 dev_no, int response);
static void device_resume_response(u32 bus_no, u32 dev_no, int response);
@@ -958,12 +958,12 @@ enum crash_obj_type {
};
};


static void
static void
bus_responder(enum controlvm_id cmd_id, u32 bus_no, int response)
bus_responder(enum controlvm_id cmd_id, struct visorchipset_bus_info *p,
	      int response)
{
{
	struct visorchipset_bus_info *p;
	bool need_clear = false;
	bool need_clear = false;
	u32 bus_no = p->bus_no;


	p = bus_find(&bus_info_list, bus_no);
	if (!p)
	if (!p)
		return;
		return;


@@ -1049,15 +1049,12 @@ device_responder(enum controlvm_id cmd_id, u32 bus_no, u32 dev_no, int response)
}
}


static void
static void
bus_epilog(u32 bus_no,
bus_epilog(struct visorchipset_bus_info *bus_info,
	   u32 cmd, struct controlvm_message_header *msg_hdr,
	   u32 cmd, struct controlvm_message_header *msg_hdr,
	   int response, bool need_response)
	   int response, bool need_response)
{
{
	struct visorchipset_bus_info *bus_info;
	bool notified = false;
	bool notified = false;


	bus_info = bus_find(&bus_info_list, bus_no);

	if (!bus_info)
	if (!bus_info)
		return;
		return;


@@ -1073,13 +1070,13 @@ bus_epilog(u32 bus_no,
		switch (cmd) {
		switch (cmd) {
		case CONTROLVM_BUS_CREATE:
		case CONTROLVM_BUS_CREATE:
			if (busdev_notifiers.bus_create) {
			if (busdev_notifiers.bus_create) {
				(*busdev_notifiers.bus_create) (bus_no);
				(*busdev_notifiers.bus_create) (bus_info);
				notified = true;
				notified = true;
			}
			}
			break;
			break;
		case CONTROLVM_BUS_DESTROY:
		case CONTROLVM_BUS_DESTROY:
			if (busdev_notifiers.bus_destroy) {
			if (busdev_notifiers.bus_destroy) {
				(*busdev_notifiers.bus_destroy) (bus_no);
				(*busdev_notifiers.bus_destroy) (bus_info);
				notified = true;
				notified = true;
			}
			}
			break;
			break;
@@ -1092,7 +1089,7 @@ bus_epilog(u32 bus_no,
		 */
		 */
		;
		;
	else
	else
		bus_responder(cmd, bus_no, response);
		bus_responder(cmd, bus_info, response);
	up(&notifier_lock);
	up(&notifier_lock);
}
}


@@ -1236,7 +1233,7 @@ bus_create(struct controlvm_message *inmsg)
	POSTCODE_LINUX_3(BUS_CREATE_EXIT_PC, bus_no, POSTCODE_SEVERITY_INFO);
	POSTCODE_LINUX_3(BUS_CREATE_EXIT_PC, bus_no, POSTCODE_SEVERITY_INFO);


cleanup:
cleanup:
	bus_epilog(bus_no, CONTROLVM_BUS_CREATE, &inmsg->hdr,
	bus_epilog(bus_info, CONTROLVM_BUS_CREATE, &inmsg->hdr,
		   rc, inmsg->hdr.flags.response_expected == 1);
		   rc, inmsg->hdr.flags.response_expected == 1);
}
}


@@ -1254,7 +1251,7 @@ bus_destroy(struct controlvm_message *inmsg)
	else if (bus_info->state.created == 0)
	else if (bus_info->state.created == 0)
		rc = -CONTROLVM_RESP_ERROR_ALREADY_DONE;
		rc = -CONTROLVM_RESP_ERROR_ALREADY_DONE;


	bus_epilog(bus_no, CONTROLVM_BUS_DESTROY, &inmsg->hdr,
	bus_epilog(bus_info, CONTROLVM_BUS_DESTROY, &inmsg->hdr,
		   rc, inmsg->hdr.flags.response_expected == 1);
		   rc, inmsg->hdr.flags.response_expected == 1);
}
}


@@ -1295,7 +1292,7 @@ bus_configure(struct controlvm_message *inmsg,
		POSTCODE_LINUX_3(BUS_CONFIGURE_EXIT_PC, bus_no,
		POSTCODE_LINUX_3(BUS_CONFIGURE_EXIT_PC, bus_no,
				 POSTCODE_SEVERITY_INFO);
				 POSTCODE_SEVERITY_INFO);
	}
	}
	bus_epilog(bus_no, CONTROLVM_BUS_CONFIGURE, &inmsg->hdr,
	bus_epilog(bus_info, CONTROLVM_BUS_CONFIGURE, &inmsg->hdr,
		   rc, inmsg->hdr.flags.response_expected == 1);
		   rc, inmsg->hdr.flags.response_expected == 1);
}
}


@@ -2112,15 +2109,15 @@ setup_crash_devices_work_queue(struct work_struct *work)
}
}


static void
static void
bus_create_response(u32 bus_no, int response)
bus_create_response(struct visorchipset_bus_info *bus_info, int response)
{
{
	bus_responder(CONTROLVM_BUS_CREATE, bus_no, response);
	bus_responder(CONTROLVM_BUS_CREATE, bus_info, response);
}
}


static void
static void
bus_destroy_response(u32 bus_no, int response)
bus_destroy_response(struct visorchipset_bus_info *bus_info, int response)
{
{
	bus_responder(CONTROLVM_BUS_DESTROY, bus_no, response);
	bus_responder(CONTROLVM_BUS_DESTROY, bus_info, response);
}
}


static void
static void
@@ -2164,10 +2161,8 @@ visorchipset_get_bus_info(u32 bus_no, struct visorchipset_bus_info *bus_info)
EXPORT_SYMBOL_GPL(visorchipset_get_bus_info);
EXPORT_SYMBOL_GPL(visorchipset_get_bus_info);


bool
bool
visorchipset_set_bus_context(u32 bus_no, void *context)
visorchipset_set_bus_context(struct visorchipset_bus_info *p, void *context)
{
{
	struct visorchipset_bus_info *p = bus_find(&bus_info_list, bus_no);

	if (!p)
	if (!p)
		return false;
		return false;
	p->bus_driver_context = context;
	p->bus_driver_context = context;