![Benjamin Herrenschmidt](/assets/img/avatar_default.png)
The hotplug mediabay has tendrils deep into drivers/ide code which makes a libata port reather difficult. In addition it's ugly and could be done better. This reworks the interface between the mediabay and the rest of the world so that: - Any macio_driver can now have a mediabay_event callback which will be called when that driver sits on a mediabay and it's been either plugged or unplugged. The device type is passed as an argument. We can now move all the IDE cruft into the IDE driver itself - A check_media_bay() function can be used to take a peek at the type of device currently in the bay if any, a cleaner variant of the previous function with the same name. - A pair of lock/unlock functions are exposed to allow the IDE driver to block the hotplug callbacks during the initial setup and probing of the bay in order to avoid nasty race conditions. - The mediabay code no longer needs to spin on the status register of the IDE interface when it detects an IDE device, this is done just fine by the IDE code itself Overall, less code, simpler, and allows for another driver than our old drivers/ide based one. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
/*
|
|
* mediabay.h: definitions for using the media bay
|
|
* on PowerBook 3400 and similar computers.
|
|
*
|
|
* Copyright (C) 1997 Paul Mackerras.
|
|
*/
|
|
#ifndef _PPC_MEDIABAY_H
|
|
#define _PPC_MEDIABAY_H
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#define MB_FD 0 /* media bay contains floppy drive (automatic eject ?) */
|
|
#define MB_FD1 1 /* media bay contains floppy drive (manual eject ?) */
|
|
#define MB_SOUND 2 /* sound device ? */
|
|
#define MB_CD 3 /* media bay contains ATA drive such as CD or ZIP */
|
|
#define MB_PCI 5 /* media bay contains a PCI device */
|
|
#define MB_POWER 6 /* media bay contains a Power device (???) */
|
|
#define MB_NO 7 /* media bay contains nothing */
|
|
|
|
struct macio_dev;
|
|
|
|
#ifdef CONFIG_PMAC_MEDIABAY
|
|
|
|
/* Check the content type of the bay, returns MB_NO if the bay is still
|
|
* transitionning
|
|
*/
|
|
extern int check_media_bay(struct macio_dev *bay);
|
|
|
|
/* The ATA driver uses the calls below to temporarily hold on the
|
|
* media bay callbacks while initializing the interface
|
|
*/
|
|
extern void lock_media_bay(struct macio_dev *bay);
|
|
extern void unlock_media_bay(struct macio_dev *bay);
|
|
|
|
#else
|
|
|
|
static inline int check_media_bay(struct macio_dev *bay)
|
|
{
|
|
return MB_NO;
|
|
}
|
|
|
|
static inline void lock_media_bay(struct macio_dev *bay) { }
|
|
static inline void unlock_media_bay(struct macio_dev *bay) { }
|
|
|
|
#endif
|
|
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _PPC_MEDIABAY_H */
|