⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tape34xx.c

📁 microwindows移植到S3C44B0的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
 * (blocksize is set via MTSETBLK. */ccw_req_t *tape34xx_mtbsr (tape_info_t * ti, int count){	long lockflags;	int i;	ccw_req_t *cqr;	ccw1_t *ccw;	if ((count == 0) || (count > 510)) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xbsr parm");#endif /* TAPE_DEBUG */   	        return NULL;	}	cqr = tape_alloc_ccw_req (ti, 2 + count, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xbsr nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	for (i = 0; i < count; i++) {		ccw->cmd_code = BACKSPACEBLOCK;		ccw->flags = CCW_FLAG_CC;		ccw->count = 0;		ccw->cda = (unsigned long) (&(ccw->cmd_code));		ccw++;	}	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_BSB_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xbsr ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTWEOF: Write 'count' file marks at the current position. */ccw_req_t *tape34xx_mtweof (tape_info_t * ti, int count){	long lockflags;	int i;	ccw_req_t *cqr;	ccw1_t *ccw;	if ((count == 0) || (count > 510)) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xweo parm");#endif /* TAPE_DEBUG */		return NULL;	}	cqr = tape_alloc_ccw_req (ti, 2 + count, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xweo nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	for (i = 0; i < count; i++) {		ccw->cmd_code = WRITETAPEMARK;		ccw->flags = CCW_FLAG_CC;		ccw->count = 1;		ccw->cda = (unsigned long) (&(ccw->cmd_code));		ccw++;	}	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_WTM_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xweo ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTREW: Rewind the tape. */ccw_req_t *tape34xx_mtrew (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 3, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xrew nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = REWIND;	ccw->flags = CCW_FLAG_CC;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_REW_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xrew ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTOFFL: Rewind the tape and put the drive off-line. * Implement 'rewind unload' */ccw_req_t *tape34xx_mtoffl (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 3, 32);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xoff nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = REWIND_UNLOAD;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = SENSE;	ccw->flags = 0;	ccw->count = 32;	ccw->cda = (unsigned long) cqr->cpaddr;	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_RUN_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xoff ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTNOP: 'No operation'. */ccw_req_t *tape34xx_mtnop (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 1, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xnop nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) ccw->cmd_code;	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xnop ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTBSFM: Backward space over 'count' file marks. * The tape is positioned at the BOT (Begin Of Tape) side of the * last skipped file mark. */ccw_req_t *tape34xx_mtbsfm (tape_info_t * ti, int count){	long lockflags;	int i;	ccw_req_t *cqr;	ccw1_t *ccw;	if ((count == 0) || (count > 510)) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xbsm parm");#endif /* TAPE_DEBUG */		return NULL;	}	cqr = tape_alloc_ccw_req (ti, 2 + count, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xbsm nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	for (i = 0; i < count; i++) {		ccw->cmd_code = BACKSPACEFILE;		ccw->flags = CCW_FLAG_CC;		ccw->count = 0;		ccw->cda = (unsigned long) (&(ccw->cmd_code));		ccw++;	}	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_BSF_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xbsm ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTFSFM: Forward space over 'count' file marks. * The tape is positioned at the BOT (Begin Of Tape) side * of the last skipped file mark. */ccw_req_t *tape34xx_mtfsfm (tape_info_t * ti, int count){	long lockflags;	int i;	ccw_req_t *cqr;	ccw1_t *ccw;	if ((count == 0) || (count > 510)) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xfsm parm");#endif /* TAPE_DEBUG */		return NULL;	}	cqr = tape_alloc_ccw_req (ti, 2 + count, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xfsm nomem");#endif /* TAPE_DEBUG */	    		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	for (i = 0; i < count; i++) {		ccw->cmd_code = FORSPACEFILE;		ccw->flags = CCW_FLAG_CC;		ccw->count = 0;		ccw->cda = (unsigned long) (&(ccw->cmd_code));		ccw++;	}	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_FSF_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xfsm ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTEOM: positions at the end of the portion of the tape already used * for recordind data. MTEOM positions after the last file mark, ready for * appending another file. * MTRETEN: Retension the tape, i.e. forward space to end of tape and rewind. */ccw_req_t *tape34xx_mteom (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 4, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xeom nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = FORSPACEFILE;	ccw->flags = CCW_FLAG_CC;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = CCW_FLAG_CC;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = CCW_CMD_TIC;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (cqr->cpaddr);	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_FSF_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xeom ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTERASE: erases the tape. */ccw_req_t *tape34xx_mterase (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 5, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xera nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = REWIND;	ccw->flags = CCW_FLAG_CC;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = ERASE_GAP;	ccw->flags = CCW_FLAG_CC;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = DATA_SEC_ERASE;	ccw->flags = CCW_FLAG_CC;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_DSE_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xera ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTSETDENSITY: set tape density. */ccw_req_t *tape34xx_mtsetdensity (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xden nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -