• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/s390/block/

Lines Matching refs: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);
534 struct eerbuffer *eerb;
537 eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL);
538 if (!eerb)
540 eerb->buffer_page_count = eer_pages;
541 if (eerb->buffer_page_count < 1 ||
542 eerb->buffer_page_count > INT_MAX / PAGE_SIZE) {
543 kfree(eerb);
549 eerb->buffersize = eerb->buffer_page_count * PAGE_SIZE;
550 eerb->buffer = kmalloc(eerb->buffer_page_count * sizeof(char *),
552 if (!eerb->buffer) {
553 kfree(eerb);
556 if (dasd_eer_allocate_buffer_pages(eerb->buffer,
557 eerb->buffer_page_count)) {
558 kfree(eerb->buffer);
559 kfree(eerb);
562 filp->private_data = eerb;
564 list_add(&eerb->list, &bufferlist);
572 struct eerbuffer *eerb;
575 eerb = (struct eerbuffer *) filp->private_data;
577 list_del(&eerb->list);
579 dasd_eer_free_buffer_pages(eerb->buffer, eerb->buffer_page_count);
580 kfree(eerb->buffer);
581 kfree(eerb);
592 struct eerbuffer *eerb;
594 eerb = (struct eerbuffer *) filp->private_data;
600 if (eerb->residual < 0) { /* the remainder of this record */
602 eerb->residual = 0;
606 } else if (eerb->residual > 0) {
608 effective_count = min(eerb->residual, (int) count);
609 eerb->residual -= effective_count;
613 tc = dasd_eer_read_buffer(eerb, (char *) &tailcount,
623 eerb->head != eerb->tail);
633 eerb->residual = tailcount - effective_count;
636 tc = dasd_eer_read_buffer(eerb, readbuffer, effective_count);
654 struct eerbuffer *eerb;
656 eerb = (struct eerbuffer *) filp->private_data;
659 if (eerb->head != eerb->tail)