Lines Matching refs:eerb
103 static int dasd_eer_get_free_bytes(struct eerbuffer *eerb) in dasd_eer_get_free_bytes() argument
105 if (eerb->head < eerb->tail) in dasd_eer_get_free_bytes()
106 return eerb->tail - eerb->head - 1; in dasd_eer_get_free_bytes()
107 return eerb->buffersize - eerb->head + eerb->tail -1; in dasd_eer_get_free_bytes()
114 static int dasd_eer_get_filled_bytes(struct eerbuffer *eerb) in dasd_eer_get_filled_bytes() argument
117 if (eerb->head >= eerb->tail) in dasd_eer_get_filled_bytes()
118 return eerb->head - eerb->tail; in dasd_eer_get_filled_bytes()
119 return eerb->buffersize - eerb->tail + eerb->head; in dasd_eer_get_filled_bytes()
128 static void dasd_eer_write_buffer(struct eerbuffer *eerb, in dasd_eer_write_buffer() argument
139 headindex = eerb->head / PAGE_SIZE; in dasd_eer_write_buffer()
140 localhead = eerb->head % PAGE_SIZE; in dasd_eer_write_buffer()
142 memcpy(eerb->buffer[headindex]+localhead, nextdata, len); in dasd_eer_write_buffer()
145 eerb->head += len; in dasd_eer_write_buffer()
146 if (eerb->head == eerb->buffersize) in dasd_eer_write_buffer()
147 eerb->head = 0; /* wrap around */ in dasd_eer_write_buffer()
148 BUG_ON(eerb->head > eerb->buffersize); in dasd_eer_write_buffer()
155 static int dasd_eer_read_buffer(struct eerbuffer *eerb, char *data, int count) in dasd_eer_read_buffer() argument
162 finalcount = min(count, dasd_eer_get_filled_bytes(eerb)); in dasd_eer_read_buffer()
166 tailindex = eerb->tail / PAGE_SIZE; in dasd_eer_read_buffer()
167 localtail = eerb->tail % PAGE_SIZE; in dasd_eer_read_buffer()
169 memcpy(nextdata, eerb->buffer[tailindex] + localtail, len); in dasd_eer_read_buffer()
172 eerb->tail += len; in dasd_eer_read_buffer()
173 if (eerb->tail == eerb->buffersize) in dasd_eer_read_buffer()
174 eerb->tail = 0; /* wrap around */ in dasd_eer_read_buffer()
175 BUG_ON(eerb->tail > eerb->buffersize); in dasd_eer_read_buffer()
187 static int dasd_eer_start_record(struct eerbuffer *eerb, int count) in dasd_eer_start_record() argument
191 if (count + sizeof(count) > eerb->buffersize) in dasd_eer_start_record()
193 while (dasd_eer_get_free_bytes(eerb) < count + sizeof(count)) { in dasd_eer_start_record()
194 if (eerb->residual > 0) { in dasd_eer_start_record()
195 eerb->tail += eerb->residual; in dasd_eer_start_record()
196 if (eerb->tail >= eerb->buffersize) in dasd_eer_start_record()
197 eerb->tail -= eerb->buffersize; in dasd_eer_start_record()
198 eerb->residual = -1; in dasd_eer_start_record()
200 dasd_eer_read_buffer(eerb, (char *) &tailcount, in dasd_eer_start_record()
202 eerb->tail += tailcount; in dasd_eer_start_record()
203 if (eerb->tail >= eerb->buffersize) in dasd_eer_start_record()
204 eerb->tail -= eerb->buffersize; in dasd_eer_start_record()
206 dasd_eer_write_buffer(eerb, (char*) &count, sizeof(count)); in dasd_eer_start_record()
301 struct eerbuffer *eerb; in dasd_eer_write_standard_trigger() local
319 list_for_each_entry(eerb, &bufferlist, list) { in dasd_eer_write_standard_trigger()
320 dasd_eer_start_record(eerb, header.total_size); in dasd_eer_write_standard_trigger()
321 dasd_eer_write_buffer(eerb, (char *) &header, sizeof(header)); in dasd_eer_write_standard_trigger()
325 dasd_eer_write_buffer(eerb, sense, 32); in dasd_eer_write_standard_trigger()
327 dasd_eer_write_buffer(eerb, "EOR", 4); in dasd_eer_write_standard_trigger()
345 struct eerbuffer *eerb; in dasd_eer_write_snss_trigger() local
362 list_for_each_entry(eerb, &bufferlist, list) { in dasd_eer_write_snss_trigger()
363 dasd_eer_start_record(eerb, header.total_size); in dasd_eer_write_snss_trigger()
364 dasd_eer_write_buffer(eerb, (char *) &header , sizeof(header)); in dasd_eer_write_snss_trigger()
366 dasd_eer_write_buffer(eerb, cqr->data, SNSS_DATA_SIZE); in dasd_eer_write_snss_trigger()
367 dasd_eer_write_buffer(eerb, "EOR", 4); in dasd_eer_write_snss_trigger()
534 struct eerbuffer *eerb; in dasd_eer_open() local
537 eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL); in dasd_eer_open()
538 if (!eerb) in dasd_eer_open()
540 eerb->buffer_page_count = eer_pages; in dasd_eer_open()
541 if (eerb->buffer_page_count < 1 || in dasd_eer_open()
542 eerb->buffer_page_count > INT_MAX / PAGE_SIZE) { in dasd_eer_open()
543 kfree(eerb); in dasd_eer_open()
549 eerb->buffersize = eerb->buffer_page_count * PAGE_SIZE; in dasd_eer_open()
550 eerb->buffer = kmalloc(eerb->buffer_page_count * sizeof(char *), in dasd_eer_open()
552 if (!eerb->buffer) { in dasd_eer_open()
553 kfree(eerb); in dasd_eer_open()
556 if (dasd_eer_allocate_buffer_pages(eerb->buffer, in dasd_eer_open()
557 eerb->buffer_page_count)) { in dasd_eer_open()
558 kfree(eerb->buffer); in dasd_eer_open()
559 kfree(eerb); in dasd_eer_open()
562 filp->private_data = eerb; in dasd_eer_open()
564 list_add(&eerb->list, &bufferlist); in dasd_eer_open()
572 struct eerbuffer *eerb; in dasd_eer_close() local
575 eerb = (struct eerbuffer *) filp->private_data; in dasd_eer_close()
577 list_del(&eerb->list); in dasd_eer_close()
579 dasd_eer_free_buffer_pages(eerb->buffer, eerb->buffer_page_count); in dasd_eer_close()
580 kfree(eerb->buffer); in dasd_eer_close()
581 kfree(eerb); in dasd_eer_close()
592 struct eerbuffer *eerb; in dasd_eer_read() local
594 eerb = (struct eerbuffer *) filp->private_data; in dasd_eer_read()
600 if (eerb->residual < 0) { /* the remainder of this record */ in dasd_eer_read()
602 eerb->residual = 0; in dasd_eer_read()
606 } else if (eerb->residual > 0) { in dasd_eer_read()
608 effective_count = min(eerb->residual, (int) count); in dasd_eer_read()
609 eerb->residual -= effective_count; in dasd_eer_read()
613 tc = dasd_eer_read_buffer(eerb, (char *) &tailcount, in dasd_eer_read()
623 eerb->head != eerb->tail); in dasd_eer_read()
633 eerb->residual = tailcount - effective_count; in dasd_eer_read()
636 tc = dasd_eer_read_buffer(eerb, readbuffer, effective_count); in dasd_eer_read()
654 struct eerbuffer *eerb; in dasd_eer_poll() local
656 eerb = (struct eerbuffer *) filp->private_data; in dasd_eer_poll()
659 if (eerb->head != eerb->tail) in dasd_eer_poll()