Lines Matching refs:dev

35 	struct pardevice *dev;	/* Parport device entry         */  member
52 static int device_check(imm_struct *dev);
63 static void got_it(imm_struct *dev) in got_it() argument
65 dev->base = dev->dev->port->base; in got_it()
66 if (dev->cur_cmd) in got_it()
67 dev->cur_cmd->SCp.phase = 1; in got_it()
69 wake_up(dev->waiting); in got_it()
74 imm_struct *dev = (imm_struct *) ref; in imm_wakeup() local
78 if (dev->wanted) { in imm_wakeup()
79 parport_claim(dev->dev); in imm_wakeup()
80 got_it(dev); in imm_wakeup()
81 dev->wanted = 0; in imm_wakeup()
86 static int imm_pb_claim(imm_struct *dev) in imm_pb_claim() argument
91 if (parport_claim(dev->dev) == 0) { in imm_pb_claim()
92 got_it(dev); in imm_pb_claim()
95 dev->wanted = res; in imm_pb_claim()
100 static void imm_pb_dismiss(imm_struct *dev) in imm_pb_dismiss() argument
105 wanted = dev->wanted; in imm_pb_dismiss()
106 dev->wanted = 0; in imm_pb_dismiss()
109 parport_release(dev->dev); in imm_pb_dismiss()
112 static inline void imm_pb_release(imm_struct *dev) in imm_pb_release() argument
114 parport_release(dev->dev); in imm_pb_release()
126 imm_struct *dev = imm_dev(host); in imm_write_info() local
129 dev->mode = simple_strtoul(buffer + 5, NULL, 0); in imm_write_info()
138 imm_struct *dev = imm_dev(host); in imm_show_info() local
141 seq_printf(m, "Parport : %s\n", dev->dev->port->name); in imm_show_info()
142 seq_printf(m, "Mode : %s\n", IMM_MODE_STRING[dev->mode]); in imm_show_info()
150 imm_fail_func(imm_struct *dev, int error_code) in imm_fail_func() argument
153 imm_fail(imm_struct *dev, int error_code) in imm_fail_func()
157 if (dev->cur_cmd) { in imm_fail_func()
158 dev->cur_cmd->result = error_code << 16; in imm_fail_func()
159 dev->failed = 1; in imm_fail_func()
170 static unsigned char imm_wait(imm_struct *dev) in imm_wait() argument
173 unsigned short ppb = dev->base; in imm_wait()
210 imm_fail(dev, DID_TIME_OUT); in imm_wait()
278 static inline void ecp_sync(imm_struct *dev) in ecp_sync() argument
280 int i, ppb_hi = dev->base_hi; in ecp_sync()
345 static int imm_out(imm_struct *dev, char *buffer, int len) in imm_out() argument
347 unsigned short ppb = dev->base; in imm_out()
348 int r = imm_wait(dev); in imm_out()
356 imm_fail(dev, DID_ERROR); in imm_out()
360 switch (dev->mode) { in imm_out()
378 ecp_sync(dev); in imm_out()
394 static int imm_in(imm_struct *dev, char *buffer, int len) in imm_in() argument
396 unsigned short ppb = dev->base; in imm_in()
397 int r = imm_wait(dev); in imm_in()
405 imm_fail(dev, DID_ERROR); in imm_in()
408 switch (dev->mode) { in imm_in()
438 ecp_sync(dev); in imm_in()
519 static inline int imm_connect(imm_struct *dev, int flag) in imm_connect() argument
521 unsigned short ppb = dev->base; in imm_connect()
526 if ((dev->mode == IMM_EPP_8) || in imm_connect()
527 (dev->mode == IMM_EPP_16) || in imm_connect()
528 (dev->mode == IMM_EPP_32)) in imm_connect()
533 static void imm_disconnect(imm_struct *dev) in imm_disconnect() argument
535 imm_cpp(dev->base, 0x30); /* Disconnect all devices */ in imm_disconnect()
538 static int imm_select(imm_struct *dev, int target) in imm_select() argument
541 unsigned short ppb = dev->base; in imm_select()
587 static int imm_init(imm_struct *dev) in imm_init() argument
589 if (imm_connect(dev, 0) != 1) in imm_init()
591 imm_reset_pulse(dev->base); in imm_init()
593 imm_disconnect(dev); in imm_init()
595 return device_check(dev); in imm_init()
600 imm_struct *dev = imm_dev(cmd->device->host); in imm_send_command() local
605 if (!imm_out(dev, &cmd->cmnd[k], 2)) in imm_send_command()
625 imm_struct *dev = imm_dev(cmd->device->host); in imm_completion() local
626 unsigned short ppb = dev->base; in imm_completion()
661 imm_fail(dev, DID_ERROR); in imm_completion()
665 if (dev->rd == 0) { in imm_completion()
669 status = imm_out(dev, cmd->SCp.ptr, fast); in imm_completion()
674 status = imm_in(dev, cmd->SCp.ptr, fast); in imm_completion()
681 imm_fail(dev, DID_BUS_BUSY); in imm_completion()
718 imm_struct *dev = container_of(work, imm_struct, imm_tq.work); in imm_interrupt() local
719 struct scsi_cmnd *cmd = dev->cur_cmd; in imm_interrupt()
723 if (imm_engine(dev, cmd)) { in imm_interrupt()
724 schedule_delayed_work(&dev->imm_tq, 1); in imm_interrupt()
763 imm_disconnect(dev); in imm_interrupt()
765 imm_pb_dismiss(dev); in imm_interrupt()
768 dev->cur_cmd = NULL; in imm_interrupt()
774 static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd) in imm_engine() argument
776 unsigned short ppb = dev->base; in imm_engine()
783 if (dev->failed) in imm_engine()
788 if (time_after(jiffies, dev->jstart + HZ)) { in imm_engine()
793 imm_fail(dev, DID_BUS_BUSY); in imm_engine()
799 imm_connect(dev, CONNECT_EPP_MAYBE); in imm_engine()
804 if (!imm_select(dev, scmd_id(cmd))) { in imm_engine()
805 imm_fail(dev, DID_NO_CONNECT); in imm_engine()
844 dev->rd = (x & 0x10) ? 1 : 0; in imm_engine()
845 dev->dp = (x & 0x20) ? 0 : 1; in imm_engine()
847 if ((dev->dp) && (dev->rd)) in imm_engine()
848 if (imm_negotiate(dev)) in imm_engine()
859 if (dev->dp) { in imm_engine()
870 if ((dev->dp) && (dev->rd)) { in imm_engine()
871 if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) { in imm_engine()
883 if (imm_wait(dev) != (unsigned char) 0xb8) { in imm_engine()
884 imm_fail(dev, DID_ERROR); in imm_engine()
887 if (imm_negotiate(dev)) in imm_engine()
889 if (imm_in(dev, &l, 1)) { /* read status byte */ in imm_engine()
891 if (imm_wait(dev) == (unsigned char) 0xb8) in imm_engine()
892 imm_in(dev, &h, 1); in imm_engine()
895 if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) { in imm_engine()
913 imm_struct *dev = imm_dev(cmd->device->host); in imm_queuecommand_lck() local
915 if (dev->cur_cmd) { in imm_queuecommand_lck()
919 dev->failed = 0; in imm_queuecommand_lck()
920 dev->jstart = jiffies; in imm_queuecommand_lck()
921 dev->cur_cmd = cmd; in imm_queuecommand_lck()
926 schedule_delayed_work(&dev->imm_tq, 0); in imm_queuecommand_lck()
928 imm_pb_claim(dev); in imm_queuecommand_lck()
941 static int imm_biosparam(struct scsi_device *sdev, struct block_device *dev, in DEF_SCSI_QCMD()
957 imm_struct *dev = imm_dev(cmd->device->host); in imm_abort() local
966 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()
1126 imm_struct *dev; in __imm_attach() local
1135 dev = kzalloc(sizeof(imm_struct), GFP_KERNEL); in __imm_attach()
1136 if (!dev) in __imm_attach()
1140 dev->base = -1; in __imm_attach()
1141 dev->mode = IMM_AUTODETECT; in __imm_attach()
1142 INIT_LIST_HEAD(&dev->list); in __imm_attach()
1144 dev->dev = parport_register_device(pb, "imm", NULL, imm_wakeup, in __imm_attach()
1145 NULL, 0, dev); in __imm_attach()
1147 if (!dev->dev) in __imm_attach()
1155 dev->waiting = &waiting; in __imm_attach()
1157 if (imm_pb_claim(dev)) in __imm_attach()
1159 if (dev->wanted) { in __imm_attach()
1163 imm_pb_dismiss(dev); in __imm_attach()
1164 dev->waiting = NULL; in __imm_attach()
1168 dev->waiting = NULL; in __imm_attach()
1170 ppb = dev->base = dev->dev->port->base; in __imm_attach()
1171 dev->base_hi = dev->dev->port->base_hi; in __imm_attach()
1173 modes = dev->dev->port->modes; in __imm_attach()
1178 dev->mode = IMM_NIBBLE; in __imm_attach()
1181 dev->mode = IMM_PS2; in __imm_attach()
1185 err = imm_init(dev); in __imm_attach()
1187 imm_pb_release(dev); in __imm_attach()
1193 if (dev->mode == IMM_NIBBLE || dev->mode == IMM_PS2) in __imm_attach()
1198 INIT_DELAYED_WORK(&dev->imm_tq, imm_interrupt); in __imm_attach()
1208 *(imm_struct **)&host->hostdata = dev; in __imm_attach()
1209 dev->host = host; in __imm_attach()
1210 list_add_tail(&dev->list, &imm_hosts); in __imm_attach()
1218 list_del_init(&dev->list); in __imm_attach()
1221 parport_unregister_device(dev->dev); in __imm_attach()
1223 kfree(dev); in __imm_attach()
1234 imm_struct *dev; in imm_detach() local
1235 list_for_each_entry(dev, &imm_hosts, list) { in imm_detach()
1236 if (dev->dev->port == pb) { in imm_detach()
1237 list_del_init(&dev->list); in imm_detach()
1238 scsi_remove_host(dev->host); in imm_detach()
1239 scsi_host_put(dev->host); in imm_detach()
1240 parport_unregister_device(dev->dev); in imm_detach()
1241 kfree(dev); in imm_detach()