Lines Matching refs:dev

36 	struct pardevice *dev;	/* Parport device entry         */  member
54 static int device_check(imm_struct *dev);
65 static void got_it(imm_struct *dev) in got_it() argument
67 dev->base = dev->dev->port->base; in got_it()
68 if (dev->cur_cmd) in got_it()
69 imm_scsi_pointer(dev->cur_cmd)->phase = 1; in got_it()
71 wake_up(dev->waiting); in got_it()
76 imm_struct *dev = (imm_struct *) ref; in imm_wakeup() local
80 if (dev->wanted) { in imm_wakeup()
81 if (parport_claim(dev->dev) == 0) { in imm_wakeup()
82 got_it(dev); in imm_wakeup()
83 dev->wanted = 0; in imm_wakeup()
89 static int imm_pb_claim(imm_struct *dev) in imm_pb_claim() argument
94 if (parport_claim(dev->dev) == 0) { in imm_pb_claim()
95 got_it(dev); in imm_pb_claim()
98 dev->wanted = res; in imm_pb_claim()
103 static void imm_pb_dismiss(imm_struct *dev) in imm_pb_dismiss() argument
108 wanted = dev->wanted; in imm_pb_dismiss()
109 dev->wanted = 0; in imm_pb_dismiss()
112 parport_release(dev->dev); in imm_pb_dismiss()
115 static inline void imm_pb_release(imm_struct *dev) in imm_pb_release() argument
117 parport_release(dev->dev); in imm_pb_release()
129 imm_struct *dev = imm_dev(host); in imm_write_info() local
132 dev->mode = simple_strtoul(buffer + 5, NULL, 0); in imm_write_info()
141 imm_struct *dev = imm_dev(host); in imm_show_info() local
144 seq_printf(m, "Parport : %s\n", dev->dev->port->name); in imm_show_info()
145 seq_printf(m, "Mode : %s\n", IMM_MODE_STRING[dev->mode]); in imm_show_info()
153 imm_fail_func(imm_struct *dev, int error_code) in imm_fail_func() argument
156 imm_fail(imm_struct *dev, int error_code) in imm_fail_func()
160 if (dev->cur_cmd) { in imm_fail_func()
161 dev->cur_cmd->result = error_code << 16; in imm_fail_func()
162 dev->failed = 1; in imm_fail_func()
173 static unsigned char imm_wait(imm_struct *dev) in imm_wait() argument
176 unsigned short ppb = dev->base; in imm_wait()
213 imm_fail(dev, DID_TIME_OUT); in imm_wait()
281 static inline void ecp_sync(imm_struct *dev) in ecp_sync() argument
283 int i, ppb_hi = dev->base_hi; in ecp_sync()
348 static int imm_out(imm_struct *dev, char *buffer, int len) in imm_out() argument
350 unsigned short ppb = dev->base; in imm_out()
351 int r = imm_wait(dev); in imm_out()
359 imm_fail(dev, DID_ERROR); in imm_out()
363 switch (dev->mode) { in imm_out()
381 ecp_sync(dev); in imm_out()
397 static int imm_in(imm_struct *dev, char *buffer, int len) in imm_in() argument
399 unsigned short ppb = dev->base; in imm_in()
400 int r = imm_wait(dev); in imm_in()
408 imm_fail(dev, DID_ERROR); in imm_in()
411 switch (dev->mode) { in imm_in()
441 ecp_sync(dev); in imm_in()
522 static inline int imm_connect(imm_struct *dev, int flag) in imm_connect() argument
524 unsigned short ppb = dev->base; in imm_connect()
529 if ((dev->mode == IMM_EPP_8) || in imm_connect()
530 (dev->mode == IMM_EPP_16) || in imm_connect()
531 (dev->mode == IMM_EPP_32)) in imm_connect()
536 static void imm_disconnect(imm_struct *dev) in imm_disconnect() argument
538 imm_cpp(dev->base, 0x30); /* Disconnect all devices */ in imm_disconnect()
541 static int imm_select(imm_struct *dev, int target) in imm_select() argument
544 unsigned short ppb = dev->base; in imm_select()
590 static int imm_init(imm_struct *dev) in imm_init() argument
592 if (imm_connect(dev, 0) != 1) in imm_init()
594 imm_reset_pulse(dev->base); in imm_init()
596 imm_disconnect(dev); in imm_init()
598 return device_check(dev); in imm_init()
603 imm_struct *dev = imm_dev(cmd->device->host); in imm_send_command() local
608 if (!imm_out(dev, &cmd->cmnd[k], 2)) in imm_send_command()
629 imm_struct *dev = imm_dev(cmd->device->host); in imm_completion() local
630 unsigned short ppb = dev->base; in imm_completion()
665 imm_fail(dev, DID_ERROR); in imm_completion()
669 if (dev->rd == 0) { in imm_completion()
672 status = imm_out(dev, scsi_pointer->ptr, fast); in imm_completion()
676 status = imm_in(dev, scsi_pointer->ptr, fast); in imm_completion()
683 imm_fail(dev, DID_BUS_BUSY); in imm_completion()
721 imm_struct *dev = container_of(work, imm_struct, imm_tq.work); in imm_interrupt() local
722 struct scsi_cmnd *cmd = dev->cur_cmd; in imm_interrupt()
726 if (imm_engine(dev, cmd)) { in imm_interrupt()
727 schedule_delayed_work(&dev->imm_tq, 1); in imm_interrupt()
766 imm_disconnect(dev); in imm_interrupt()
768 imm_pb_dismiss(dev); in imm_interrupt()
771 dev->cur_cmd = NULL; in imm_interrupt()
777 static int imm_engine(imm_struct *dev, struct scsi_cmnd *const cmd) in imm_engine() argument
780 unsigned short ppb = dev->base; in imm_engine()
787 if (dev->failed) in imm_engine()
792 if (time_after(jiffies, dev->jstart + HZ)) { in imm_engine()
797 imm_fail(dev, DID_BUS_BUSY); in imm_engine()
803 imm_connect(dev, CONNECT_EPP_MAYBE); in imm_engine()
808 if (!imm_select(dev, scmd_id(cmd))) { in imm_engine()
809 imm_fail(dev, DID_NO_CONNECT); in imm_engine()
849 dev->rd = (x & 0x10) ? 1 : 0; in imm_engine()
850 dev->dp = (x & 0x20) ? 0 : 1; in imm_engine()
852 if ((dev->dp) && (dev->rd)) in imm_engine()
853 if (imm_negotiate(dev)) in imm_engine()
864 if (dev->dp) { in imm_engine()
875 if ((dev->dp) && (dev->rd)) { in imm_engine()
876 if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) { in imm_engine()
888 if (imm_wait(dev) != (unsigned char) 0xb8) { in imm_engine()
889 imm_fail(dev, DID_ERROR); in imm_engine()
892 if (imm_negotiate(dev)) in imm_engine()
894 if (imm_in(dev, &l, 1)) { /* read status byte */ in imm_engine()
896 if (imm_wait(dev) == (unsigned char) 0xb8) in imm_engine()
897 imm_in(dev, &h, 1); in imm_engine()
900 if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) { in imm_engine()
916 imm_struct *dev = imm_dev(cmd->device->host); in imm_queuecommand_lck() local
918 if (dev->cur_cmd) { in imm_queuecommand_lck()
922 dev->failed = 0; in imm_queuecommand_lck()
923 dev->jstart = jiffies; in imm_queuecommand_lck()
924 dev->cur_cmd = cmd; in imm_queuecommand_lck()
928 schedule_delayed_work(&dev->imm_tq, 0); in imm_queuecommand_lck()
930 imm_pb_claim(dev); in imm_queuecommand_lck()
943 static int imm_biosparam(struct scsi_device *sdev, struct block_device *dev, in DEF_SCSI_QCMD()
959 imm_struct *dev = imm_dev(cmd->device->host); in imm_abort() local
968 dev->cur_cmd = NULL; /* Forget the problem */ in imm_abort()
989 imm_struct *dev = imm_dev(cmd->device->host); in imm_reset() local
992 imm_disconnect(dev); in imm_reset()
993 dev->cur_cmd = NULL; /* Forget the problem */ in imm_reset()
995 imm_connect(dev, CONNECT_NORMAL); in imm_reset()
996 imm_reset_pulse(dev->base); in imm_reset()
998 imm_disconnect(dev); in imm_reset()
1003 static int device_check(imm_struct *dev) in device_check() argument
1009 int loop, old_mode, status, k, ppb = dev->base; in device_check()
1012 old_mode = dev->mode; in device_check()
1016 dev->mode = IMM_EPP_32; in device_check()
1019 imm_connect(dev, CONNECT_EPP_MAYBE); in device_check()
1021 if (!imm_select(dev, loop)) { in device_check()
1022 imm_disconnect(dev); in device_check()
1026 loop, IMM_MODE_STRING[dev->mode]); in device_check()
1032 status = imm_out(dev, &cmd[l << 1], 2); in device_check()
1035 imm_disconnect(dev); in device_check()
1036 imm_connect(dev, CONNECT_EPP_MAYBE); in device_check()
1037 imm_reset_pulse(dev->base); in device_check()
1039 imm_disconnect(dev); in device_check()
1041 if (dev->mode == IMM_EPP_32) { in device_check()
1042 dev->mode = old_mode; in device_check()
1060 imm_disconnect(dev); in device_check()
1061 imm_connect(dev, CONNECT_EPP_MAYBE); in device_check()
1062 imm_reset_pulse(dev->base); in device_check()
1064 imm_disconnect(dev); in device_check()
1066 if (dev->mode == IMM_EPP_32) { in device_check()
1067 dev->mode = old_mode; in device_check()
1074 imm_disconnect(dev); in device_check()
1077 ppb, loop, IMM_MODE_STRING[dev->mode]); in device_check()
1078 imm_connect(dev, CONNECT_EPP_MAYBE); in device_check()
1079 imm_reset_pulse(dev->base); in device_check()
1081 imm_disconnect(dev); in device_check()
1130 imm_struct *dev, *par = NULL; in find_parent() local
1136 list_for_each_entry(dev, &imm_hosts, list) { in find_parent()
1137 if (dev->dev_no != cnt) in find_parent()
1140 par = dev; in find_parent()
1149 imm_struct *dev, *temp; in __imm_attach() local
1159 dev = kzalloc(sizeof(imm_struct), GFP_KERNEL); in __imm_attach()
1160 if (!dev) in __imm_attach()
1164 dev->base = -1; in __imm_attach()
1165 dev->mode = IMM_AUTODETECT; in __imm_attach()
1166 INIT_LIST_HEAD(&dev->list); in __imm_attach()
1170 dev->dev_no = temp->dev_no + 1; in __imm_attach()
1173 imm_cb.private = dev; in __imm_attach()
1176 dev->dev = parport_register_dev_model(pb, "imm", &imm_cb, dev->dev_no); in __imm_attach()
1177 if (!dev->dev) in __imm_attach()
1185 dev->waiting = &waiting; in __imm_attach()
1187 if (imm_pb_claim(dev)) in __imm_attach()
1189 if (dev->wanted) { in __imm_attach()
1193 imm_pb_dismiss(dev); in __imm_attach()
1194 dev->waiting = NULL; in __imm_attach()
1198 dev->waiting = NULL; in __imm_attach()
1200 ppb = dev->base = dev->dev->port->base; in __imm_attach()
1201 dev->base_hi = dev->dev->port->base_hi; in __imm_attach()
1203 modes = dev->dev->port->modes; in __imm_attach()
1208 dev->mode = IMM_NIBBLE; in __imm_attach()
1211 dev->mode = IMM_PS2; in __imm_attach()
1215 err = imm_init(dev); in __imm_attach()
1217 imm_pb_release(dev); in __imm_attach()
1223 if (dev->mode == IMM_NIBBLE || dev->mode == IMM_PS2) in __imm_attach()
1228 INIT_DELAYED_WORK(&dev->imm_tq, imm_interrupt); in __imm_attach()
1238 *(imm_struct **)&host->hostdata = dev; in __imm_attach()
1239 dev->host = host; in __imm_attach()
1241 list_add_tail(&dev->list, &imm_hosts); in __imm_attach()
1243 list_add_tail(&dev->list, &temp->list); in __imm_attach()
1251 list_del_init(&dev->list); in __imm_attach()
1254 parport_unregister_device(dev->dev); in __imm_attach()
1256 kfree(dev); in __imm_attach()
1267 imm_struct *dev; in imm_detach() local
1268 list_for_each_entry(dev, &imm_hosts, list) { in imm_detach()
1269 if (dev->dev->port == pb) { in imm_detach()
1270 list_del_init(&dev->list); in imm_detach()
1271 scsi_remove_host(dev->host); in imm_detach()
1272 scsi_host_put(dev->host); in imm_detach()
1273 parport_unregister_device(dev->dev); in imm_detach()
1274 kfree(dev); in imm_detach()