Lines Matching defs:eerb
104 static int dasd_eer_get_free_bytes(struct eerbuffer *eerb)
106 if (eerb->head < eerb->tail)
107 return eerb->tail - eerb->head - 1;
108 return eerb->buffersize - eerb->head + eerb->tail -1;
115 static int dasd_eer_get_filled_bytes(struct eerbuffer *eerb)
118 if (eerb->head >= eerb->tail)
119 return eerb->head - eerb->tail;
120 return eerb->buffersize - eerb->tail + eerb->head;
129 static void dasd_eer_write_buffer(struct eerbuffer *eerb,
140 headindex = eerb->head / PAGE_SIZE;
141 localhead = eerb->head % PAGE_SIZE;
143 memcpy(eerb->buffer[headindex]+localhead, nextdata, len);
146 eerb->head += len;
147 if (eerb->head == eerb->buffersize)
148 eerb->head = 0; /* wrap around */
149 BUG_ON(eerb->head > eerb->buffersize);
156 static int dasd_eer_read_buffer(struct eerbuffer *eerb, char *data, int count)
163 finalcount = min(count, dasd_eer_get_filled_bytes(eerb));
167 tailindex = eerb->tail / PAGE_SIZE;
168 localtail = eerb->tail % PAGE_SIZE;
170 memcpy(nextdata, eerb->buffer[tailindex] + localtail, len);
173 eerb->tail += len;
174 if (eerb->tail == eerb->buffersize)
175 eerb->tail = 0; /* wrap around */
176 BUG_ON(eerb->tail > eerb->buffersize);
188 static int dasd_eer_start_record(struct eerbuffer *eerb, int count)
192 if (count + sizeof(count) > eerb->buffersize)
194 while (dasd_eer_get_free_bytes(eerb) < count + sizeof(count)) {
195 if (eerb->residual > 0) {
196 eerb->tail += eerb->residual;
197 if (eerb->tail >= eerb->buffersize)
198 eerb->tail -= eerb->buffersize;
199 eerb->residual = -1;
201 dasd_eer_read_buffer(eerb, (char *) &tailcount,
203 eerb->tail += tailcount;
204 if (eerb->tail >= eerb->buffersize)
205 eerb->tail -= eerb->buffersize;
207 dasd_eer_write_buffer(eerb, (char*) &count, sizeof(count));
302 struct eerbuffer *eerb;
320 list_for_each_entry(eerb, &bufferlist, list) {
321 dasd_eer_start_record(eerb, header.total_size);
322 dasd_eer_write_buffer(eerb, (char *) &header, sizeof(header));
326 dasd_eer_write_buffer(eerb, sense, 32);
328 dasd_eer_write_buffer(eerb, "EOR", 4);
346 struct eerbuffer *eerb;
363 list_for_each_entry(eerb, &bufferlist, list) {
364 dasd_eer_start_record(eerb, header.total_size);
365 dasd_eer_write_buffer(eerb, (char *) &header , sizeof(header));
367 dasd_eer_write_buffer(eerb, cqr->data, SNSS_DATA_SIZE);
368 dasd_eer_write_buffer(eerb, "EOR", 4);
550 struct eerbuffer *eerb;
553 eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL);
554 if (!eerb)
556 eerb->buffer_page_count = eer_pages;
557 if (eerb->buffer_page_count < 1 ||
558 eerb->buffer_page_count > INT_MAX / PAGE_SIZE) {
559 kfree(eerb);
565 eerb->buffersize = eerb->buffer_page_count * PAGE_SIZE;
566 eerb->buffer = kmalloc_array(eerb->buffer_page_count, sizeof(char *),
568 if (!eerb->buffer) {
569 kfree(eerb);
572 if (dasd_eer_allocate_buffer_pages(eerb->buffer,
573 eerb->buffer_page_count)) {
574 kfree(eerb->buffer);
575 kfree(eerb);
578 filp->private_data = eerb;
580 list_add(&eerb->list, &bufferlist);
588 struct eerbuffer *eerb;
591 eerb = (struct eerbuffer *) filp->private_data;
593 list_del(&eerb->list);
595 dasd_eer_free_buffer_pages(eerb->buffer, eerb->buffer_page_count);
596 kfree(eerb->buffer);
597 kfree(eerb);
608 struct eerbuffer *eerb;
610 eerb = (struct eerbuffer *) filp->private_data;
616 if (eerb->residual < 0) { /* the remainder of this record */
618 eerb->residual = 0;
622 } else if (eerb->residual > 0) {
624 effective_count = min(eerb->residual, (int) count);
625 eerb->residual -= effective_count;
629 tc = dasd_eer_read_buffer(eerb, (char *) &tailcount,
639 eerb->head != eerb->tail);
649 eerb->residual = tailcount - effective_count;
652 tc = dasd_eer_read_buffer(eerb, readbuffer, effective_count);
670 struct eerbuffer *eerb;
672 eerb = (struct eerbuffer *) filp->private_data;
675 if (eerb->head != eerb->tail)