You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge ../linux-2.6 by hand
This commit is contained in:
+30
-1
@@ -778,6 +778,35 @@ config BLK_DEV_IDE_PMAC_BLINK
|
||||
This option enables the use of the sleep LED as a hard drive
|
||||
activity LED.
|
||||
|
||||
config BLK_DEV_IDE_AU1XXX
|
||||
bool "IDE for AMD Alchemy Au1200"
|
||||
depends on SOC_AU1200
|
||||
choice
|
||||
prompt "IDE Mode for AMD Alchemy Au1200"
|
||||
default CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA
|
||||
depends on SOC_AU1200 && BLK_DEV_IDE_AU1XXX
|
||||
|
||||
config BLK_DEV_IDE_AU1XXX_PIO_DBDMA
|
||||
bool "PIO+DbDMA IDE for AMD Alchemy Au1200"
|
||||
|
||||
config BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
|
||||
bool "MDMA2+DbDMA IDE for AMD Alchemy Au1200"
|
||||
depends on SOC_AU1200 && BLK_DEV_IDE_AU1XXX
|
||||
endchoice
|
||||
|
||||
config BLK_DEV_IDE_AU1XXX_BURSTABLE_ON
|
||||
bool "Enable burstable Mode on DbDMA"
|
||||
default false
|
||||
depends BLK_DEV_IDE_AU1XXX
|
||||
help
|
||||
This option enable the burstable Flag on DbDMA controller
|
||||
(cf. "AMD Alchemy 'Au1200' Processor Data Book - PRELIMINARY").
|
||||
|
||||
config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ
|
||||
int "Maximum transfer size (KB) per request (up to 128)"
|
||||
default "128"
|
||||
depends BLK_DEV_IDE_AU1XXX
|
||||
|
||||
config IDE_ARM
|
||||
def_bool ARM && (ARCH_A5K || ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)
|
||||
|
||||
@@ -1013,7 +1042,7 @@ config BLK_DEV_UMC8672
|
||||
endif
|
||||
|
||||
config BLK_DEV_IDEDMA
|
||||
def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS
|
||||
def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
|
||||
|
||||
config IDEDMA_IVB
|
||||
bool "IGNORE word93 Validation BITS"
|
||||
|
||||
+31
-25
@@ -2211,13 +2211,12 @@ static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
|
||||
|
||||
if (toc == NULL) {
|
||||
/* Try to allocate space. */
|
||||
toc = (struct atapi_toc *) kmalloc (sizeof (struct atapi_toc),
|
||||
GFP_KERNEL);
|
||||
info->toc = toc;
|
||||
toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
|
||||
if (toc == NULL) {
|
||||
printk (KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
|
||||
return -ENOMEM;
|
||||
}
|
||||
info->toc = toc;
|
||||
}
|
||||
|
||||
/* Check to see if the existing data is still valid.
|
||||
@@ -2240,7 +2239,8 @@ static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
|
||||
/* First read just the header, so we know how long the TOC is. */
|
||||
stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
|
||||
sizeof(struct atapi_toc_header), sense);
|
||||
if (stat) return stat;
|
||||
if (stat)
|
||||
return stat;
|
||||
|
||||
#if ! STANDARD_ATAPI
|
||||
if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
|
||||
@@ -2324,7 +2324,8 @@ static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
|
||||
/* Read the multisession information. */
|
||||
stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
|
||||
sizeof(ms_tmp), sense);
|
||||
if (stat) return stat;
|
||||
if (stat)
|
||||
return stat;
|
||||
|
||||
toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
|
||||
} else {
|
||||
@@ -2460,7 +2461,7 @@ static int ide_cdrom_packet(struct cdrom_device_info *cdi,
|
||||
struct packet_command *cgc)
|
||||
{
|
||||
struct request req;
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
|
||||
if (cgc->timeout <= 0)
|
||||
cgc->timeout = ATAPI_WAIT_PC;
|
||||
@@ -2537,7 +2538,7 @@ int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
|
||||
unsigned int cmd, void *arg)
|
||||
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
struct cdrom_info *info = drive->driver_data;
|
||||
int stat;
|
||||
|
||||
@@ -2548,7 +2549,7 @@ int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
|
||||
*/
|
||||
case CDROMPLAYTRKIND: {
|
||||
unsigned long lba_start, lba_end;
|
||||
struct cdrom_ti *ti = (struct cdrom_ti *)arg;
|
||||
struct cdrom_ti *ti = arg;
|
||||
struct atapi_toc_entry *first_toc, *last_toc;
|
||||
|
||||
stat = cdrom_get_toc_entry(drive, ti->cdti_trk0, &first_toc);
|
||||
@@ -2571,12 +2572,13 @@ int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
|
||||
}
|
||||
|
||||
case CDROMREADTOCHDR: {
|
||||
struct cdrom_tochdr *tochdr = (struct cdrom_tochdr *) arg;
|
||||
struct cdrom_tochdr *tochdr = arg;
|
||||
struct atapi_toc *toc;
|
||||
|
||||
/* Make sure our saved TOC is valid. */
|
||||
stat = cdrom_read_toc(drive, NULL);
|
||||
if (stat) return stat;
|
||||
if (stat)
|
||||
return stat;
|
||||
|
||||
toc = info->toc;
|
||||
tochdr->cdth_trk0 = toc->hdr.first_track;
|
||||
@@ -2586,11 +2588,12 @@ int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
|
||||
}
|
||||
|
||||
case CDROMREADTOCENTRY: {
|
||||
struct cdrom_tocentry *tocentry = (struct cdrom_tocentry*) arg;
|
||||
struct cdrom_tocentry *tocentry = arg;
|
||||
struct atapi_toc_entry *toce;
|
||||
|
||||
stat = cdrom_get_toc_entry(drive, tocentry->cdte_track, &toce);
|
||||
if (stat) return stat;
|
||||
if (stat)
|
||||
return stat;
|
||||
|
||||
tocentry->cdte_ctrl = toce->control;
|
||||
tocentry->cdte_adr = toce->adr;
|
||||
@@ -2613,7 +2616,7 @@ int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
|
||||
static
|
||||
int ide_cdrom_reset (struct cdrom_device_info *cdi)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
struct request_sense sense;
|
||||
struct request req;
|
||||
int ret;
|
||||
@@ -2636,12 +2639,13 @@ int ide_cdrom_reset (struct cdrom_device_info *cdi)
|
||||
static
|
||||
int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
struct request_sense sense;
|
||||
|
||||
if (position) {
|
||||
int stat = cdrom_lockdoor(drive, 0, &sense);
|
||||
if (stat) return stat;
|
||||
if (stat)
|
||||
return stat;
|
||||
}
|
||||
|
||||
return cdrom_eject(drive, !position, &sense);
|
||||
@@ -2650,7 +2654,7 @@ int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
|
||||
static
|
||||
int ide_cdrom_lock_door (struct cdrom_device_info *cdi, int lock)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
return cdrom_lockdoor(drive, lock, NULL);
|
||||
}
|
||||
|
||||
@@ -2700,7 +2704,7 @@ void ide_cdrom_update_speed (ide_drive_t *drive, struct atapi_capabilities_page
|
||||
static
|
||||
int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
struct request_sense sense;
|
||||
struct atapi_capabilities_page cap;
|
||||
int stat;
|
||||
@@ -2723,7 +2727,7 @@ int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
|
||||
static
|
||||
int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
struct media_event_desc med;
|
||||
struct request_sense sense;
|
||||
int stat;
|
||||
@@ -2769,7 +2773,7 @@ int ide_cdrom_get_last_session (struct cdrom_device_info *cdi,
|
||||
struct cdrom_multisession *ms_info)
|
||||
{
|
||||
struct atapi_toc *toc;
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
struct cdrom_info *info = drive->driver_data;
|
||||
struct request_sense sense;
|
||||
int ret;
|
||||
@@ -2791,7 +2795,7 @@ int ide_cdrom_get_mcn (struct cdrom_device_info *cdi,
|
||||
{
|
||||
int stat;
|
||||
char mcnbuf[24];
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
|
||||
/* get MCN */
|
||||
if ((stat = cdrom_read_subchannel(drive, 2, mcnbuf, sizeof (mcnbuf), NULL)))
|
||||
@@ -2815,7 +2819,7 @@ static
|
||||
int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi,
|
||||
int slot_nr)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t*) cdi->handle;
|
||||
ide_drive_t *drive = cdi->handle;
|
||||
int retval;
|
||||
|
||||
if (slot_nr == CDSL_CURRENT) {
|
||||
@@ -2886,7 +2890,7 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots)
|
||||
devinfo->mask = 0;
|
||||
devinfo->speed = CDROM_STATE_FLAGS(drive)->current_speed;
|
||||
devinfo->capacity = nslots;
|
||||
devinfo->handle = (void *) drive;
|
||||
devinfo->handle = drive;
|
||||
strcpy(devinfo->name, drive->name);
|
||||
|
||||
/* set capability mask to match the probe. */
|
||||
@@ -2942,7 +2946,7 @@ int ide_cdrom_probe_capabilities (ide_drive_t *drive)
|
||||
* registered with the Uniform layer yet, it can't do this.
|
||||
* Same goes for cdi->ops.
|
||||
*/
|
||||
cdi->handle = (ide_drive_t *) drive;
|
||||
cdi->handle = drive;
|
||||
cdi->ops = &ide_cdrom_dops;
|
||||
|
||||
if (ide_cdrom_get_capabilities(drive, &cap))
|
||||
@@ -3254,6 +3258,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
static
|
||||
sector_t ide_cdrom_capacity (ide_drive_t *drive)
|
||||
{
|
||||
@@ -3264,6 +3269,7 @@ sector_t ide_cdrom_capacity (ide_drive_t *drive)
|
||||
|
||||
return capacity * sectors_per_frame;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ide_cd_remove(struct device *dev)
|
||||
{
|
||||
@@ -3309,7 +3315,7 @@ static int ide_cd_probe(struct device *);
|
||||
static int proc_idecd_read_capacity
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t*drive = (ide_drive_t *)data;
|
||||
ide_drive_t *drive = data;
|
||||
int len;
|
||||
|
||||
len = sprintf(page,"%llu\n", (long long)ide_cdrom_capacity(drive));
|
||||
@@ -3449,7 +3455,7 @@ static int ide_cd_probe(struct device *dev)
|
||||
printk(KERN_INFO "ide-cd: passing drive %s to ide-scsi emulation.\n", drive->name);
|
||||
goto failed;
|
||||
}
|
||||
info = (struct cdrom_info *) kmalloc (sizeof (struct cdrom_info), GFP_KERNEL);
|
||||
info = kmalloc(sizeof(struct cdrom_info), GFP_KERNEL);
|
||||
if (info == NULL) {
|
||||
printk(KERN_ERR "%s: Can't allocate a cdrom structure\n", drive->name);
|
||||
goto failed;
|
||||
|
||||
@@ -64,6 +64,7 @@ static int proc_ide_read_imodel
|
||||
case ide_cy82c693: name = "cy82c693"; break;
|
||||
case ide_4drives: name = "4drives"; break;
|
||||
case ide_pmac: name = "mac-io"; break;
|
||||
case ide_au1xxx: name = "au1xxx"; break;
|
||||
default: name = "(unknown)"; break;
|
||||
}
|
||||
len = sprintf(page, "%s\n", name);
|
||||
|
||||
+36
-2
@@ -1013,6 +1013,8 @@ typedef struct ide_tape_obj {
|
||||
|
||||
static DECLARE_MUTEX(idetape_ref_sem);
|
||||
|
||||
static struct class *idetape_sysfs_class;
|
||||
|
||||
#define to_ide_tape(obj) container_of(obj, struct ide_tape_obj, kref)
|
||||
|
||||
#define ide_tape_g(disk) \
|
||||
@@ -4704,6 +4706,10 @@ static void ide_tape_release(struct kref *kref)
|
||||
|
||||
drive->dsc_overlap = 0;
|
||||
drive->driver_data = NULL;
|
||||
class_device_destroy(idetape_sysfs_class,
|
||||
MKDEV(IDETAPE_MAJOR, tape->minor));
|
||||
class_device_destroy(idetape_sysfs_class,
|
||||
MKDEV(IDETAPE_MAJOR, tape->minor + 128));
|
||||
devfs_remove("%s/mt", drive->devfs_name);
|
||||
devfs_remove("%s/mtn", drive->devfs_name);
|
||||
devfs_unregister_tape(g->number);
|
||||
@@ -4878,6 +4884,11 @@ static int ide_tape_probe(struct device *dev)
|
||||
|
||||
idetape_setup(drive, tape, minor);
|
||||
|
||||
class_device_create(idetape_sysfs_class, NULL,
|
||||
MKDEV(IDETAPE_MAJOR, minor), dev, "%s", tape->name);
|
||||
class_device_create(idetape_sysfs_class, NULL,
|
||||
MKDEV(IDETAPE_MAJOR, minor + 128), dev, "n%s", tape->name);
|
||||
|
||||
devfs_mk_cdev(MKDEV(HWIF(drive)->major, minor),
|
||||
S_IFCHR | S_IRUGO | S_IWUGO,
|
||||
"%s/mt", drive->devfs_name);
|
||||
@@ -4903,6 +4914,7 @@ MODULE_LICENSE("GPL");
|
||||
static void __exit idetape_exit (void)
|
||||
{
|
||||
driver_unregister(&idetape_driver.gen_driver);
|
||||
class_destroy(idetape_sysfs_class);
|
||||
unregister_chrdev(IDETAPE_MAJOR, "ht");
|
||||
}
|
||||
|
||||
@@ -4911,11 +4923,33 @@ static void __exit idetape_exit (void)
|
||||
*/
|
||||
static int idetape_init (void)
|
||||
{
|
||||
int error = 1;
|
||||
idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
|
||||
if (IS_ERR(idetape_sysfs_class)) {
|
||||
idetape_sysfs_class = NULL;
|
||||
printk(KERN_ERR "Unable to create sysfs class for ide tapes\n");
|
||||
error = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (register_chrdev(IDETAPE_MAJOR, "ht", &idetape_fops)) {
|
||||
printk(KERN_ERR "ide-tape: Failed to register character device interface\n");
|
||||
return -EBUSY;
|
||||
error = -EBUSY;
|
||||
goto out_free_class;
|
||||
}
|
||||
return driver_register(&idetape_driver.gen_driver);
|
||||
|
||||
error = driver_register(&idetape_driver.gen_driver);
|
||||
if (error)
|
||||
goto out_free_driver;
|
||||
|
||||
return 0;
|
||||
|
||||
out_free_driver:
|
||||
driver_unregister(&idetape_driver.gen_driver);
|
||||
out_free_class:
|
||||
class_destroy(idetape_sysfs_class);
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
module_init(idetape_init);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user