at_wini: PCI-only now; one controller per instance
- remove non-PCI support, since all supported platforms with at_wini devices also have PCI support by now; - correspondingly, stop using information from the BIOS altogether; - limit each driver instance to one controller, to be in line with the general MINIX3 one-instance-per-controller driver model; this limits the number of disks per at_wini instance to four; - go through the controllers by the order of their occurrence in the PCI table, thus removing the exception for compatibility devices; - let the second at_wini instance shut down silently if there is only one IDE controller; - clean up some extra code we don't need anymore, and resolve some WARNS=5 level warnings. Overall, these changes should simplify automatic loading of the right disk drivers at boot time in the future. Change-Id: Ia64d08cfbeb9916abd68c9c2941baeb87d02a806
This commit is contained in:
parent
89332ecdf1
commit
6d466f941b
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,6 @@
|
||||
|
||||
#define VERBOSE 0 /* display identify messages during boot */
|
||||
#define VERBOSE_DMA 0 /* display DMA debugging information */
|
||||
#define ENABLE_ATAPI 1 /* add ATAPI cd-rom support to driver */
|
||||
|
||||
#define ATAPI_DEBUG 0 /* To debug ATAPI code. */
|
||||
|
||||
@ -129,7 +128,6 @@
|
||||
* regular LBA.
|
||||
*/
|
||||
|
||||
#if ENABLE_ATAPI
|
||||
#define ERROR_SENSE 0xF0 /* sense key mask */
|
||||
#define SENSE_NONE 0x00 /* no sense key */
|
||||
#define SENSE_RECERR 0x10 /* recovered error */
|
||||
@ -156,7 +154,6 @@
|
||||
#define REG_CNT_LO 4 /* low byte of cylinder number */
|
||||
#define REG_CNT_HI 5 /* high byte of cylinder number */
|
||||
#define REG_DRIVE 6 /* drive select */
|
||||
#endif
|
||||
|
||||
#define REG_STATUS 7 /* status */
|
||||
#define STATUS_BSY 0x80 /* controller busy */
|
||||
@ -167,15 +164,10 @@
|
||||
#define STATUS_CORR 0x04 /* correctable error occurred */
|
||||
#define STATUS_CHECK 0x01 /* check error */
|
||||
|
||||
#if ENABLE_ATAPI
|
||||
#define ATAPI_PACKETCMD 0xA0 /* packet command */
|
||||
#define ATAPI_IDENTIFY 0xA1 /* identify drive */
|
||||
#define SCSI_READ10 0x28 /* read from disk */
|
||||
#define SCSI_SENSE 0x03 /* sense request */
|
||||
#endif /* ATAPI */
|
||||
|
||||
/* Interrupt request lines. */
|
||||
#define NO_IRQ 0 /* no IRQ set yet */
|
||||
|
||||
#define ATAPI_PACKETSIZE 12
|
||||
#define SENSE_PACKETSIZE 18
|
||||
@ -185,16 +177,16 @@
|
||||
#define ERR_BAD_SECTOR (-2) /* block marked bad detected */
|
||||
|
||||
/* Some controllers don't interrupt, the clock will wake us up. */
|
||||
#define WAKEUP_SECS 32 /* drive may be out for 31 seconds max */
|
||||
#define WAKEUP_SECS 32 /* drive may be out for 31 seconds max */
|
||||
#define WAKEUP_TICKS (WAKEUP_SECS*system_hz)
|
||||
|
||||
/* Miscellaneous. */
|
||||
#define MAX_DRIVES 8
|
||||
#define COMPAT_DRIVES 4
|
||||
#define MAX_DRIVES 4 /* max number of actual drives per instance */
|
||||
#define MAX_DRIVENODES 8 /* number of drive nodes, for node numbering */
|
||||
#define MAX_SECS 256 /* controller can transfer this many sectors */
|
||||
#define MAX_ERRORS 4 /* how often to try rd/wt before quitting */
|
||||
#define NR_MINORS (MAX_DRIVES * DEV_PER_DRIVE)
|
||||
#define NR_SUBDEVS (MAX_DRIVES * SUB_PER_DRIVE)
|
||||
#define NR_MINORS (MAX_DRIVENODES * DEV_PER_DRIVE)
|
||||
#define NR_SUBDEVS (MAX_DRIVENODES * SUB_PER_DRIVE)
|
||||
#define DELAY_USECS 1000 /* controller timeout in microseconds */
|
||||
#define DELAY_TICKS 1 /* controller timeout in ticks */
|
||||
#define DEF_TIMEOUT_USECS 5000000L /* controller timeout in microseconds */
|
||||
@ -203,18 +195,15 @@
|
||||
#define INITIALIZED 0x01 /* drive is initialized */
|
||||
#define DEAF 0x02 /* controller must be reset */
|
||||
#define SMART 0x04 /* drive supports ATA commands */
|
||||
#if ENABLE_ATAPI
|
||||
#define ATAPI 0x08 /* it is an ATAPI device */
|
||||
#else
|
||||
#define ATAPI 0 /* don't bother with ATAPI; optimise out */
|
||||
#endif
|
||||
#define IDENTIFIED 0x10 /* w_identify done successfully */
|
||||
#define IGNORING 0x20 /* w_identify failed once */
|
||||
|
||||
#define NO_DMA_VAR "ata_no_dma"
|
||||
|
||||
/* BIOS parameter table layout. */
|
||||
#define bp_cylinders(t) (t[0] | (t[1] << 8))
|
||||
#define bp_heads(t) (t[2])
|
||||
#define bp_precomp(t) (t[5] | (t[6] << 8))
|
||||
#define bp_sectors(t) (t[14])
|
||||
#define ATA_IF_NATIVE0 (1L << 0) /* first channel is in native mode */
|
||||
#define ATA_IF_NATIVE1 (1L << 2) /* second channel is in native mode */
|
||||
|
||||
extern int sef_cb_lu_prepare(int state);
|
||||
extern int sef_cb_lu_state_isvalid(int state);
|
||||
extern void sef_cb_lu_state_dump(int state);
|
||||
|
@ -40,7 +40,7 @@ then if [ -e $ACPI -a -n "`sysenv acpi`" ]
|
||||
/bin/service -c up /sbin/virtio_blk -dev /dev/c0d0 -label virtio_blk_0 -args instance=0
|
||||
else
|
||||
/bin/service -c up /sbin/at_wini -dev /dev/c0d0 -label at_wini_0
|
||||
/bin/service -cr up /sbin/at_wini -dev /dev/c1d0 -label at_wini_1 -args instance=1
|
||||
/bin/service -cr up /sbin/at_wini -dev /dev/c1d0 -label at_wini_1 -args instance=1 2>/dev/null || :
|
||||
fi
|
||||
/bin/umount /proc >/dev/null
|
||||
fi
|
||||
|
@ -368,12 +368,14 @@ service at_wini
|
||||
DEVIO # 21
|
||||
SDEVIO # 22
|
||||
VDEVIO # 23
|
||||
READBIOS # 35
|
||||
;
|
||||
pci class
|
||||
1/1 # Mass storage / IDE
|
||||
1/80 # Mass storage / Other (80 hex)
|
||||
1/4 # Mass storage / RAID
|
||||
pci class # Match these PCI classes:
|
||||
1/1 # Mass storage / IDE
|
||||
;
|
||||
pci device # In addition, match these devices:
|
||||
1106:3149 # VIA VT6420 RAID (1/4)
|
||||
1095:3512/1095:6512 # Silicon Image SATA RAID (1/4)
|
||||
1095:3114/1095:3114 # Silicon Image SATA RAID (1/80)
|
||||
;
|
||||
};
|
||||
|
||||
|
@ -93,23 +93,9 @@
|
||||
*/
|
||||
#define NR_MEMS 16
|
||||
|
||||
|
||||
/* Click to byte conversions (and vice versa). */
|
||||
#define HCLICK_SHIFT 4 /* log2 of HCLICK_SIZE */
|
||||
#define HCLICK_SIZE 16 /* hardware segment conversion magic */
|
||||
#if CLICK_SIZE >= HCLICK_SIZE
|
||||
#define click_to_hclick(n) ((n) << (CLICK_SHIFT - HCLICK_SHIFT))
|
||||
#else
|
||||
#define click_to_hclick(n) ((n) >> (HCLICK_SHIFT - CLICK_SHIFT))
|
||||
#endif
|
||||
#define hclick_to_physb(n) ((phys_bytes) (n) << HCLICK_SHIFT)
|
||||
#define physb_to_hclick(n) ((n) >> HCLICK_SHIFT)
|
||||
|
||||
#define CLICK2ABS(v) ((v) << CLICK_SHIFT)
|
||||
#define ABS2CLICK(a) ((a) >> CLICK_SHIFT)
|
||||
|
||||
#define ABS -999 /* this process means absolute memory */
|
||||
|
||||
/* Flag bits for i_mode in the inode. */
|
||||
#define I_TYPE 0170000 /* this field gives inode type */
|
||||
#define I_UNIX_SOCKET 0140000 /* unix domain socket */
|
||||
|
Loading…
x
Reference in New Issue
Block a user