--- pt.c Thu Jun 14 09:40:54 2001 +++ pt.c.working Wed Jun 13 19:38:46 2001 @@ -208,6 +208,13 @@ #define ATAPI_IDENTIFY 0x12 #define ATAPI_MODE_SENSE 0x1a #define ATAPI_LOG_SENSE 0x4d +#define ATAPI_ERASE 0x19 +#define ATAPI_UNLOAD 0x1b +#define ATAPI_LOCATE 0x2b +#define ATAPI_LOG_SELECT 0x4c +#define ATAPI_MODE_SELECT 0x15 +#define ATAPI_READ_POS 0x34 +#define ATAPI_SPACE 0x11 int pt_init(void); #ifdef MODULE @@ -520,6 +527,35 @@ pt_media_access_cmd(unit,PT_TMO,wm_cmd,"write filemark"); } +static void pt_erase( int unit ) + +{ char erase_cmd[12] = {ATAPI_ERASE,0,0,0,0,0,0,0,0,0,0,0}; + + pt_media_access_cmd(unit,PT_TMO,erase_cmd,"erase"); +} + +static void pt_unload( int unit ) + +{ char unload_cmd[12] = {ATAPI_UNLOAD,0,0,0,0,0,0,0,0,0,0,0}; + + pt_media_access_cmd(unit,PT_TMO,unload_cmd,"unload"); +} + +static void pt_reten( int unit ) + +{ char reten_cmd[12] = {ATAPI_UNLOAD,0,0,0,3,0,0,0,0,0,0,0}; + + pt_media_access_cmd(unit,PT_TMO,reten_cmd,"retension"); +} + +static void pt_load( int unit ) + +{ char load_cmd[12] = {ATAPI_UNLOAD,0,0,0,2,0,0,0,0,0,0,0}; + + pt_media_access_cmd(unit,PT_TMO,load_cmd,"load"); +} + + #define DBMSG(msg) ((verbose>1)?(msg):NULL) static int pt_reset( int unit ) @@ -752,7 +788,27 @@ case MTREW: pt_rewind(unit); return 0; - + break; + case MTWEOF: + pt_write_fm(unit); + return 0; + break; + case MTERASE: + pt_erase(unit); + return 0; + break; + case MTLOAD: + pt_load(unit); + return 0; + break; + case MTUNLOAD: + pt_unload(unit); + return 0; + break; + case MTRETEN: + pt_reten(unit); + return 0; + break; default: printk("%s: Unimplemented mt_op %d\n",PT.name, mtop.mt_op);