* [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume
@ 2006-08-21 0:51 Lee Trager
2006-08-21 16:33 ` Sergei Shtylyov
0 siblings, 1 reply; 4+ messages in thread
From: Lee Trager @ 2006-08-21 0:51 UTC (permalink / raw)
To: linux-ide
This patch fixes a problem that when a computer with HPA on it's hard
drive comes out of sleep mode it needs the disks capacity reinitialized.
This is my first patch to the Linux kernel so if I did anything wrong
please be gentle ;)
Lee Trager
diff -Naur linux-2.6.18-rc4-old/include/linux/ide.h
linux-2.6.18-rc4/include/linux/ide.h
--- linux-2.6.18-rc4-old/include/linux/ide.h 2006-08-19
03:49:03.000000000 -0400
+++ linux-2.6.18-rc4/include/linux/ide.h 2006-08-20
19:13:10.000000000 -0400
@@ -1201,6 +1201,17 @@
void ide_register_subdriver(ide_drive_t *, ide_driver_t *);
void ide_unregister_subdriver(ide_drive_t *, ide_driver_t *);
+/* Bits 10 of command_set_1 and cfs_enable_1 must be equal,
+ * so on non-buggy drives we need test only one.
+ * However, we should also check whether these fields are valid.
+*/
+static inline int idedisk_supports_hpa(const struct hd_driveid *id)
+{
+ return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400);
+}
+
+extern void init_idedisk_capacity (ide_drive_t *drive);
+
#define ON_BOARD 1
#define NEVER_BOARD 0
diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide-disk.c
linux-2.6.18-rc4/drivers/ide/ide-disk.c
--- linux-2.6.18-rc4-old/drivers/ide/ide-disk.c 2006-08-19
03:49:03.000000000 -0400
+++ linux-2.6.18-rc4/drivers/ide/ide-disk.c 2006-08-20
19:13:56.000000000 -0400
@@ -464,16 +464,6 @@
}
/*
- * Bits 10 of command_set_1 and cfs_enable_1 must be equal,
- * so on non-buggy drives we need test only one.
- * However, we should also check whether these fields are valid.
- */
-static inline int idedisk_supports_hpa(const struct hd_driveid *id)
-{
- return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400);
-}
-
-/*
* The same here.
*/
static inline int idedisk_supports_lba48(const struct hd_driveid *id)
@@ -528,7 +518,7 @@
* in above order (i.e., if value of higher priority is available,
* reset will be ignored).
*/
-static void init_idedisk_capacity (ide_drive_t *drive)
+void init_idedisk_capacity (ide_drive_t *drive)
{
struct hd_driveid *id = drive->id;
/*
@@ -555,6 +545,8 @@
}
}
+EXPORT_SYMBOL(init_idedisk_capacity);
+
static sector_t idedisk_capacity (ide_drive_t *drive)
{
return drive->capacity64 - drive->sect0;
diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c
linux-2.6.18-rc4/drivers/ide/ide.c
--- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19
03:49:03.000000000 -0400
+++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000
-0400
@@ -1232,6 +1232,7 @@
struct request rq;
struct request_pm_state rqpm;
ide_task_t args;
+ int ide_cmd;
memset(&rq, 0, sizeof(rq));
memset(&rqpm, 0, sizeof(rqpm));
@@ -1242,7 +1243,15 @@
rqpm.pm_step = ide_pm_state_start_resume;
rqpm.pm_state = PM_EVENT_ON;
- return ide_do_drive_cmd(drive, &rq, ide_head_wait);
+ ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait);
+
+ /* check to see if this is a hard drive
+ * if it is then checkhpa needs to be
+ * disabled */
+ if(drive->media == ide_disk && idedisk_supports_hpa(drive->id))
+ init_idedisk_capacity(drive);
+
+ return ide_cmd;
}
int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct
block_device *bdev,
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume 2006-08-21 0:51 [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume Lee Trager @ 2006-08-21 16:33 ` Sergei Shtylyov 2006-08-21 21:18 ` Lee Trager 0 siblings, 1 reply; 4+ messages in thread From: Sergei Shtylyov @ 2006-08-21 16:33 UTC (permalink / raw) To: Lee Trager; +Cc: linux-ide, Alan Cox Hello. Lee Trager wrote: > This patch fixes a problem that when a computer with HPA on it's hard > drive comes out of sleep mode it needs the disks capacity reinitialized. > This is my first patch to the Linux kernel so if I did anything wrong > please be gentle ;) Your mailer spoils tabs, so either attach your patch or use the different mailer. [...] > diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c > linux-2.6.18-rc4/drivers/ide/ide.c > --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19 > 03:49:03.000000000 -0400 > +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000 > -0400 > @@ -1232,6 +1232,7 @@ > struct request rq; > struct request_pm_state rqpm; > ide_task_t args; > + int ide_cmd; > > memset(&rq, 0, sizeof(rq)); > memset(&rqpm, 0, sizeof(rqpm)); > @@ -1242,7 +1243,15 @@ > rqpm.pm_step = ide_pm_state_start_resume; > rqpm.pm_state = PM_EVENT_ON; > > - return ide_do_drive_cmd(drive, &rq, ide_head_wait); > + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait); > + > + /* check to see if this is a hard drive > + * if it is then checkhpa needs to be > + * disabled */ > + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id)) > + init_idedisk_capacity(drive); > + > + return ide_cmd; > } Hm, shouldn't this be handled as a separate resume process step? MBR, Sergei ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume 2006-08-21 16:33 ` Sergei Shtylyov @ 2006-08-21 21:18 ` Lee Trager 2006-08-21 23:15 ` Lee Trager 0 siblings, 1 reply; 4+ messages in thread From: Lee Trager @ 2006-08-21 21:18 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linux-ide, Alan Cox [-- Attachment #1: Type: text/plain, Size: 1714 bytes --] Sergei Shtylyov wrote: > Hello. > > Lee Trager wrote: > >> This patch fixes a problem that when a computer with HPA on it's hard >> drive comes out of sleep mode it needs the disks capacity reinitialized. > >> This is my first patch to the Linux kernel so if I did anything wrong >> please be gentle ;) > > Your mailer spoils tabs, so either attach your patch or use the > different > mailer. > > [...] > >> diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c >> linux-2.6.18-rc4/drivers/ide/ide.c >> --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19 >> 03:49:03.000000000 -0400 >> +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000 >> -0400 >> @@ -1232,6 +1232,7 @@ >> struct request rq; >> struct request_pm_state rqpm; >> ide_task_t args; >> + int ide_cmd; >> >> memset(&rq, 0, sizeof(rq)); >> memset(&rqpm, 0, sizeof(rqpm)); >> @@ -1242,7 +1243,15 @@ >> rqpm.pm_step = ide_pm_state_start_resume; >> rqpm.pm_state = PM_EVENT_ON; >> >> - return ide_do_drive_cmd(drive, &rq, ide_head_wait); >> + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait); >> + >> + /* check to see if this is a hard drive >> + * if it is then checkhpa needs to be >> + * disabled */ >> + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id)) >> + init_idedisk_capacity(drive); >> + >> + return ide_cmd; >> } > > Hm, shouldn't this be handled as a separate resume process step? > > MBR, Sergei > > - > To unsubscribe from this list: send the line "unsubscribe linux-ide" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Ok I attached it now. [-- Attachment #2: hpa-resume.patch --] [-- Type: text/plain, Size: 2937 bytes --] diff -Naur linux-2.6.18-rc4-old/include/linux/ide.h linux-2.6.18-rc4/include/linux/ide.h --- linux-2.6.18-rc4-old/include/linux/ide.h 2006-08-19 03:49:03.000000000 -0400 +++ linux-2.6.18-rc4/include/linux/ide.h 2006-08-20 19:13:10.000000000 -0400 @@ -1201,6 +1201,17 @@ void ide_register_subdriver(ide_drive_t *, ide_driver_t *); void ide_unregister_subdriver(ide_drive_t *, ide_driver_t *); +/* Bits 10 of command_set_1 and cfs_enable_1 must be equal, + * so on non-buggy drives we need test only one. + * However, we should also check whether these fields are valid. +*/ +static inline int idedisk_supports_hpa(const struct hd_driveid *id) +{ + return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400); +} + +extern void init_idedisk_capacity (ide_drive_t *drive); + #define ON_BOARD 1 #define NEVER_BOARD 0 diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide-disk.c linux-2.6.18-rc4/drivers/ide/ide-disk.c --- linux-2.6.18-rc4-old/drivers/ide/ide-disk.c 2006-08-19 03:49:03.000000000 -0400 +++ linux-2.6.18-rc4/drivers/ide/ide-disk.c 2006-08-20 19:13:56.000000000 -0400 @@ -464,16 +464,6 @@ } /* - * Bits 10 of command_set_1 and cfs_enable_1 must be equal, - * so on non-buggy drives we need test only one. - * However, we should also check whether these fields are valid. - */ -static inline int idedisk_supports_hpa(const struct hd_driveid *id) -{ - return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400); -} - -/* * The same here. */ static inline int idedisk_supports_lba48(const struct hd_driveid *id) @@ -528,7 +518,7 @@ * in above order (i.e., if value of higher priority is available, * reset will be ignored). */ -static void init_idedisk_capacity (ide_drive_t *drive) +void init_idedisk_capacity (ide_drive_t *drive) { struct hd_driveid *id = drive->id; /* @@ -555,6 +545,8 @@ } } +EXPORT_SYMBOL(init_idedisk_capacity); + static sector_t idedisk_capacity (ide_drive_t *drive) { return drive->capacity64 - drive->sect0; diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c linux-2.6.18-rc4/drivers/ide/ide.c --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19 03:49:03.000000000 -0400 +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000 -0400 @@ -1232,6 +1232,7 @@ struct request rq; struct request_pm_state rqpm; ide_task_t args; + int ide_cmd; memset(&rq, 0, sizeof(rq)); memset(&rqpm, 0, sizeof(rqpm)); @@ -1242,7 +1243,15 @@ rqpm.pm_step = ide_pm_state_start_resume; rqpm.pm_state = PM_EVENT_ON; - return ide_do_drive_cmd(drive, &rq, ide_head_wait); + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait); + + /* check to see if this is a hard drive + * if it is then checkhpa needs to be + * disabled */ + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id)) + init_idedisk_capacity(drive); + + return ide_cmd; } int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev, ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume 2006-08-21 21:18 ` Lee Trager @ 2006-08-21 23:15 ` Lee Trager 0 siblings, 0 replies; 4+ messages in thread From: Lee Trager @ 2006-08-21 23:15 UTC (permalink / raw) To: Lee Trager; +Cc: Sergei Shtylyov, linux-ide, Alan Cox Lee Trager wrote: > Sergei Shtylyov wrote: > >> Hello. >> >> Lee Trager wrote: >> >> >>> This patch fixes a problem that when a computer with HPA on it's hard >>> drive comes out of sleep mode it needs the disks capacity reinitialized. >>> >>> This is my first patch to the Linux kernel so if I did anything wrong >>> please be gentle ;) >>> >> Your mailer spoils tabs, so either attach your patch or use the >> different >> mailer. >> >> [...] >> >> >>> diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c >>> linux-2.6.18-rc4/drivers/ide/ide.c >>> --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19 >>> 03:49:03.000000000 -0400 >>> +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000 >>> -0400 >>> @@ -1232,6 +1232,7 @@ >>> struct request rq; >>> struct request_pm_state rqpm; >>> ide_task_t args; >>> + int ide_cmd; >>> >>> memset(&rq, 0, sizeof(rq)); >>> memset(&rqpm, 0, sizeof(rqpm)); >>> @@ -1242,7 +1243,15 @@ >>> rqpm.pm_step = ide_pm_state_start_resume; >>> rqpm.pm_state = PM_EVENT_ON; >>> >>> - return ide_do_drive_cmd(drive, &rq, ide_head_wait); >>> + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait); >>> + >>> + /* check to see if this is a hard drive >>> + * if it is then checkhpa needs to be >>> + * disabled */ >>> + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id)) >>> + init_idedisk_capacity(drive); >>> + >>> + return ide_cmd; >>> } >>> >> Hm, shouldn't this be handled as a separate resume process step? >> >> MBR, Sergei >> >> - >> To unsubscribe from this list: send the line "unsubscribe linux-ide" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> > Ok I attached it now. > > ------------------------------------------------------------------------ > > diff -Naur linux-2.6.18-rc4-old/include/linux/ide.h linux-2.6.18-rc4/include/linux/ide.h > --- linux-2.6.18-rc4-old/include/linux/ide.h 2006-08-19 03:49:03.000000000 -0400 > +++ linux-2.6.18-rc4/include/linux/ide.h 2006-08-20 19:13:10.000000000 -0400 > @@ -1201,6 +1201,17 @@ > void ide_register_subdriver(ide_drive_t *, ide_driver_t *); > void ide_unregister_subdriver(ide_drive_t *, ide_driver_t *); > > +/* Bits 10 of command_set_1 and cfs_enable_1 must be equal, > + * so on non-buggy drives we need test only one. > + * However, we should also check whether these fields are valid. > +*/ > +static inline int idedisk_supports_hpa(const struct hd_driveid *id) > +{ > + return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400); > +} > + > +extern void init_idedisk_capacity (ide_drive_t *drive); > + > #define ON_BOARD 1 > #define NEVER_BOARD 0 > > diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide-disk.c linux-2.6.18-rc4/drivers/ide/ide-disk.c > --- linux-2.6.18-rc4-old/drivers/ide/ide-disk.c 2006-08-19 03:49:03.000000000 -0400 > +++ linux-2.6.18-rc4/drivers/ide/ide-disk.c 2006-08-20 19:13:56.000000000 -0400 > @@ -464,16 +464,6 @@ > } > > /* > - * Bits 10 of command_set_1 and cfs_enable_1 must be equal, > - * so on non-buggy drives we need test only one. > - * However, we should also check whether these fields are valid. > - */ > -static inline int idedisk_supports_hpa(const struct hd_driveid *id) > -{ > - return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400); > -} > - > -/* > * The same here. > */ > static inline int idedisk_supports_lba48(const struct hd_driveid *id) > @@ -528,7 +518,7 @@ > * in above order (i.e., if value of higher priority is available, > * reset will be ignored). > */ > -static void init_idedisk_capacity (ide_drive_t *drive) > +void init_idedisk_capacity (ide_drive_t *drive) > { > struct hd_driveid *id = drive->id; > /* > @@ -555,6 +545,8 @@ > } > } > > +EXPORT_SYMBOL(init_idedisk_capacity); > + > static sector_t idedisk_capacity (ide_drive_t *drive) > { > return drive->capacity64 - drive->sect0; > diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c linux-2.6.18-rc4/drivers/ide/ide.c > --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19 03:49:03.000000000 -0400 > +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000 -0400 > @@ -1232,6 +1232,7 @@ > struct request rq; > struct request_pm_state rqpm; > ide_task_t args; > + int ide_cmd; > > memset(&rq, 0, sizeof(rq)); > memset(&rqpm, 0, sizeof(rqpm)); > @@ -1242,7 +1243,15 @@ > rqpm.pm_step = ide_pm_state_start_resume; > rqpm.pm_state = PM_EVENT_ON; > > - return ide_do_drive_cmd(drive, &rq, ide_head_wait); > + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait); > + > + /* check to see if this is a hard drive > + * if it is then checkhpa needs to be > + * disabled */ > + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id)) > + init_idedisk_capacity(drive); > + > + return ide_cmd; > } > > int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev, > I put it there because honestly I wasn't sure where else to put it. Anyway it is in the generic_ide_resume() and its something that needs to be done on an ide disk with HPA on resume. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-08-21 23:15 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-08-21 0:51 [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume Lee Trager 2006-08-21 16:33 ` Sergei Shtylyov 2006-08-21 21:18 ` Lee Trager 2006-08-21 23:15 ` Lee Trager
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).