Lines Matching refs:sd

41 	struct subch_data_s *sd = subch_data;  in scdrv_interrupt()  local
45 spin_lock_irqsave(&sd->sd_rlock, flags); in scdrv_interrupt()
46 spin_lock(&sd->sd_wlock); in scdrv_interrupt()
47 status = ia64_sn_irtr_intr(sd->sd_nasid, sd->sd_subch); in scdrv_interrupt()
51 wake_up(&sd->sd_rq); in scdrv_interrupt()
55 (sd->sd_nasid, sd->sd_subch, in scdrv_interrupt()
57 wake_up(&sd->sd_wq); in scdrv_interrupt()
60 spin_unlock(&sd->sd_wlock); in scdrv_interrupt()
61 spin_unlock_irqrestore(&sd->sd_rlock, flags); in scdrv_interrupt()
75 struct subch_data_s *sd; in scdrv_open() local
82 sd = kzalloc(sizeof (struct subch_data_s), GFP_KERNEL); in scdrv_open()
83 if (sd == NULL) { in scdrv_open()
90 sd->sd_nasid = scd->scd_nasid; in scdrv_open()
91 sd->sd_subch = ia64_sn_irtr_open(scd->scd_nasid); in scdrv_open()
93 if (sd->sd_subch < 0) { in scdrv_open()
94 kfree(sd); in scdrv_open()
99 spin_lock_init(&sd->sd_rlock); in scdrv_open()
100 spin_lock_init(&sd->sd_wlock); in scdrv_open()
101 init_waitqueue_head(&sd->sd_rq); in scdrv_open()
102 init_waitqueue_head(&sd->sd_wq); in scdrv_open()
103 sema_init(&sd->sd_rbs, 1); in scdrv_open()
104 sema_init(&sd->sd_wbs, 1); in scdrv_open()
106 file->private_data = sd; in scdrv_open()
111 IRQF_SHARED, SYSCTL_BASENAME, sd); in scdrv_open()
113 ia64_sn_irtr_close(sd->sd_nasid, sd->sd_subch); in scdrv_open()
114 kfree(sd); in scdrv_open()
132 struct subch_data_s *sd = (struct subch_data_s *) file->private_data; in scdrv_release() local
136 free_irq(SGI_UART_VECTOR, sd); in scdrv_release()
139 rv = ia64_sn_irtr_close(sd->sd_nasid, sd->sd_subch); in scdrv_release()
141 kfree(sd); in scdrv_release()
153 read_status_check(struct subch_data_s *sd, int *len) in read_status_check() argument
155 return ia64_sn_irtr_recv(sd->sd_nasid, sd->sd_subch, sd->sd_rb, len); in read_status_check()
164 struct subch_data_s *sd = (struct subch_data_s *) file->private_data; in scdrv_read() local
167 if (down_trylock(&sd->sd_rbs)) { in scdrv_read()
175 if (down_interruptible(&sd->sd_rbs)) { in scdrv_read()
183 spin_lock_irqsave(&sd->sd_rlock, flags); in scdrv_read()
184 status = read_status_check(sd, &len); in scdrv_read()
191 spin_unlock_irqrestore(&sd->sd_rlock, flags); in scdrv_read()
192 up(&sd->sd_rbs); in scdrv_read()
198 add_wait_queue(&sd->sd_rq, &wait); in scdrv_read()
199 spin_unlock_irqrestore(&sd->sd_rlock, flags); in scdrv_read()
203 remove_wait_queue(&sd->sd_rq, &wait); in scdrv_read()
206 up(&sd->sd_rbs); in scdrv_read()
210 spin_lock_irqsave(&sd->sd_rlock, flags); in scdrv_read()
211 status = read_status_check(sd, &len); in scdrv_read()
213 spin_unlock_irqrestore(&sd->sd_rlock, flags); in scdrv_read()
224 if (copy_to_user(buf, sd->sd_rb, len)) in scdrv_read()
231 up(&sd->sd_rbs); in scdrv_read()
245 write_status_check(struct subch_data_s *sd, int count) in write_status_check() argument
247 return ia64_sn_irtr_send(sd->sd_nasid, sd->sd_subch, sd->sd_wb, count); in write_status_check()
256 struct subch_data_s *sd = (struct subch_data_s *) file->private_data; in scdrv_write() local
259 if (down_trylock(&sd->sd_wbs)) { in scdrv_write()
267 if (down_interruptible(&sd->sd_wbs)) { in scdrv_write()
274 if (copy_from_user(sd->sd_wb, buf, count)) { in scdrv_write()
275 up(&sd->sd_wbs); in scdrv_write()
280 spin_lock_irqsave(&sd->sd_wlock, flags); in scdrv_write()
281 status = write_status_check(sd, count); in scdrv_write()
288 spin_unlock(&sd->sd_wlock); in scdrv_write()
289 up(&sd->sd_wbs); in scdrv_write()
294 add_wait_queue(&sd->sd_wq, &wait); in scdrv_write()
295 spin_unlock_irqrestore(&sd->sd_wlock, flags); in scdrv_write()
299 remove_wait_queue(&sd->sd_wq, &wait); in scdrv_write()
302 up(&sd->sd_wbs); in scdrv_write()
306 spin_lock_irqsave(&sd->sd_wlock, flags); in scdrv_write()
307 status = write_status_check(sd, count); in scdrv_write()
309 spin_unlock_irqrestore(&sd->sd_wlock, flags); in scdrv_write()
312 up(&sd->sd_wbs); in scdrv_write()
329 struct subch_data_s *sd = (struct subch_data_s *) file->private_data; in scdrv_poll() local
332 poll_wait(file, &sd->sd_rq, wait); in scdrv_poll()
333 poll_wait(file, &sd->sd_wq, wait); in scdrv_poll()
335 spin_lock_irqsave(&sd->sd_rlock, flags); in scdrv_poll()
336 spin_lock(&sd->sd_wlock); in scdrv_poll()
337 status = ia64_sn_irtr_intr(sd->sd_nasid, sd->sd_subch); in scdrv_poll()
338 spin_unlock(&sd->sd_wlock); in scdrv_poll()
339 spin_unlock_irqrestore(&sd->sd_rlock, flags); in scdrv_poll()