aacraid: AIF raw device remove support
Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
parent
ef6162333a
commit
dab04b0151
2 changed files with 36 additions and 0 deletions
|
@ -2065,6 +2065,9 @@ extern struct aac_common aac_config;
|
||||||
/* PMC NEW COMM: Request the event data */
|
/* PMC NEW COMM: Request the event data */
|
||||||
#define AifReqEvent 200
|
#define AifReqEvent 200
|
||||||
|
|
||||||
|
/* RAW device deleted */
|
||||||
|
#define AifRawDeviceRemove 203
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adapter Initiated FIB command structures. Start with the adapter
|
* Adapter Initiated FIB command structures. Start with the adapter
|
||||||
* initiated FIBs that really come from the adapter, and get responded
|
* initiated FIBs that really come from the adapter, and get responded
|
||||||
|
|
|
@ -883,6 +883,39 @@ static void aac_handle_aif(struct aac_dev * dev, struct fib * fibptr)
|
||||||
switch (le32_to_cpu(aifcmd->command)) {
|
switch (le32_to_cpu(aifcmd->command)) {
|
||||||
case AifCmdDriverNotify:
|
case AifCmdDriverNotify:
|
||||||
switch (le32_to_cpu(((__le32 *)aifcmd->data)[0])) {
|
switch (le32_to_cpu(((__le32 *)aifcmd->data)[0])) {
|
||||||
|
case AifRawDeviceRemove:
|
||||||
|
container = le32_to_cpu(((__le32 *)aifcmd->data)[1]);
|
||||||
|
if ((container >> 28)) {
|
||||||
|
container = (u32)-1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
channel = (container >> 24) & 0xF;
|
||||||
|
if (channel >= dev->maximum_num_channels) {
|
||||||
|
container = (u32)-1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
id = container & 0xFFFF;
|
||||||
|
if (id >= dev->maximum_num_physicals) {
|
||||||
|
container = (u32)-1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
lun = (container >> 16) & 0xFF;
|
||||||
|
container = (u32)-1;
|
||||||
|
channel = aac_phys_to_logical(channel);
|
||||||
|
device_config_needed =
|
||||||
|
(((__le32 *)aifcmd->data)[0] ==
|
||||||
|
cpu_to_le32(AifRawDeviceRemove)) ? DELETE : ADD;
|
||||||
|
|
||||||
|
if (device_config_needed == ADD) {
|
||||||
|
device = scsi_device_lookup(
|
||||||
|
dev->scsi_host_ptr,
|
||||||
|
channel, id, lun);
|
||||||
|
if (device) {
|
||||||
|
scsi_remove_device(device);
|
||||||
|
scsi_device_put(device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
/*
|
/*
|
||||||
* Morph or Expand complete
|
* Morph or Expand complete
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue