[PATCH] ide busproc() method

Tim Hockin (thockin@sun.com)
Tue, 14 Aug 2001 17:51:13 -0700


This is a multi-part message in MIME format.
--------------D6EFECAA8812092899309CAA
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

All,

Attached is a smallpatch which implements the HDIO_GET/SET_BUSSTATE
ioctls. These ioctl numbers were added as part of a previous patch I sent,
but the actual use of them did not get included.

This adds support for the two ioctls and adds a hwif struct member to track
current state and a method to change the bus state. This code is a key
part of hot-swappable IDE.

We've been using it for months without problems. Please patch this in for
the next 2.4.x.

Tim

-- 
Tim Hockin
Systems Software Engineer
Sun Microsystems, Cobalt Server Appliances
thockin@sun.com
--------------D6EFECAA8812092899309CAA
Content-Type: text/plain; charset=us-ascii;
 name="ide_busproc.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ide_busproc.diff"

diff -ruN dist+patches-2.4.8/drivers/ide/ide.c cobalt-2.4.8/drivers/ide/ide.c --- dist+patches-2.4.8/drivers/ide/ide.c Mon Aug 13 16:52:18 2001 +++ cobalt-2.4.8/drivers/ide/ide.c Mon Aug 13 16:41:56 2001 @@ -249,6 +253,7 @@ hwif->name[1] = 'd'; hwif->name[2] = 'e'; hwif->name[3] = '0' + index; + hwif->bus_state = BUSSTATE_ON; for (unit = 0; unit < MAX_DRIVES; ++unit) { ide_drive_t *drive = &hwif->drives[unit]; @@ -2090,6 +2112,8 @@ hwif->quirkproc = old_hwif.quirkproc; hwif->rwproc = old_hwif.rwproc; hwif->dmaproc = old_hwif.dmaproc; + hwif->busproc = old_hwif.busproc; + hwif->bus_state = old_hwif.bus_state; hwif->dma_base = old_hwif.dma_base; hwif->dma_extra = old_hwif.dma_extra; hwif->config_data = old_hwif.config_data; @@ -2673,6 +2697,20 @@ case BLKBSZSET: return blk_ioctl(inode->i_rdev, cmd, arg); + case HDIO_GET_BUSSTATE: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (put_user(HWIF(drive)->bus_state, (long *)arg)) + return -EFAULT; + return 0; + + case HDIO_SET_BUSSTATE: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (HWIF(drive)->busproc) + HWIF(drive)->busproc(HWIF(drive), arg); + return 0; + default: if (drive->driver != NULL) return DRIVER(drive)->ioctl(drive, inode, file, cmd, arg); diff -ruN dist+patches-2.4.8/include/linux/ide.h cobalt-2.4.8/include/linux/ide.h --- dist+patches-2.4.8/include/linux/ide.h Fri Aug 10 18:15:44 2001 +++ cobalt-2.4.8/include/linux/ide.h Mon Aug 13 16:42:49 2001 @@ -397,6 +403,11 @@ typedef void (ide_rw_proc_t) (ide_drive_t *, ide_dma_action_t); /* + * ide soft-power support + */ +typedef int (ide_busproc_t) (struct hwif_s *, int); + +/* * hwif_chipset_t is used to keep track of the specific hardware * chipset used by each IDE interface, if known. */ @@ -467,6 +478,8 @@ #endif byte straight8; /* Alan's straight 8 check */ void *hwif_data; /* extra hwif data */ + ide_busproc_t *busproc; /* driver soft-power interface */ + byte bus_state; /* power state of the IDE bus */ } ide_hwif_t;

--------------D6EFECAA8812092899309CAA--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/