octeon_ebt3000_cf.c (242201) | octeon_ebt3000_cf.c (242273) |
---|---|
1/***********************license start*************** 2 * Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights 3 * reserved. 4 * 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: --- 28 unchanged lines hidden (view full) --- 37 ***********************license end**************************************/ 38 39/* 40 * octeon_ebt3000_cf.c 41 * 42 */ 43 44#include <sys/cdefs.h> | 1/***********************license start*************** 2 * Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights 3 * reserved. 4 * 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: --- 28 unchanged lines hidden (view full) --- 37 ***********************license end**************************************/ 38 39/* 40 * octeon_ebt3000_cf.c 41 * 42 */ 43 44#include <sys/cdefs.h> |
45__FBSDID("$FreeBSD: head/sys/mips/cavium/octeon_ebt3000_cf.c 242201 2012-10-27 23:36:41Z jmallett $"); | 45__FBSDID("$FreeBSD: head/sys/mips/cavium/octeon_ebt3000_cf.c 242273 2012-10-29 00:51:53Z jmallett $"); |
46 47#include <sys/param.h> 48#include <sys/bio.h> 49#include <sys/systm.h> 50#include <sys/sysctl.h> 51#include <sys/ata.h> 52#include <sys/bus.h> 53#include <sys/kernel.h> --- 267 unchanged lines hidden (view full) --- 321static int cf_cmd_read (uint32_t nr_sectors, uint32_t start_sector, void *buf) 322{ 323 unsigned long lba; 324 uint32_t count; 325 uint16_t *ptr_16; 326 uint8_t *ptr_8; 327 int error; 328 | 46 47#include <sys/param.h> 48#include <sys/bio.h> 49#include <sys/systm.h> 50#include <sys/sysctl.h> 51#include <sys/ata.h> 52#include <sys/bus.h> 53#include <sys/kernel.h> --- 267 unchanged lines hidden (view full) --- 321static int cf_cmd_read (uint32_t nr_sectors, uint32_t start_sector, void *buf) 322{ 323 unsigned long lba; 324 uint32_t count; 325 uint16_t *ptr_16; 326 uint8_t *ptr_8; 327 int error; 328 |
329//#define OCTEON_VISUAL_CF_0 1 330#ifdef OCTEON_VISUAL_CF_0 331 octeon_led_write_char(0, 'R'); 332#endif | |
333 ptr_8 = (uint8_t*)buf; 334 ptr_16 = (uint16_t*)buf; 335 lba = start_sector; 336 | 329 ptr_8 = (uint8_t*)buf; 330 ptr_16 = (uint16_t*)buf; 331 lba = start_sector; 332 |
337 | |
338 while (nr_sectors--) { 339 error = cf_send_cmd(lba, CMD_READ_SECTOR); 340 if (error != 0) { 341 printf("%s: cf_send_cmd(CMD_READ_SECTOR) failed: %d\n", __func__, error); 342 return (error); 343 } 344 345 switch (bus_type) --- 15 unchanged lines hidden (view full) --- 361 if ((count & 0xf) == 0) 362 (void)cf_inb_16(TF_STATUS); 363 } 364 break; 365 } 366 367 lba++; 368 } | 333 while (nr_sectors--) { 334 error = cf_send_cmd(lba, CMD_READ_SECTOR); 335 if (error != 0) { 336 printf("%s: cf_send_cmd(CMD_READ_SECTOR) failed: %d\n", __func__, error); 337 return (error); 338 } 339 340 switch (bus_type) --- 15 unchanged lines hidden (view full) --- 356 if ((count & 0xf) == 0) 357 (void)cf_inb_16(TF_STATUS); 358 } 359 break; 360 } 361 362 lba++; 363 } |
369#ifdef OCTEON_VISUAL_CF_0 370 octeon_led_write_char(0, ' '); 371#endif | |
372 return (0); 373} 374 375 376/* ------------------------------------------------------------------- * 377 * cf_cmd_write() * 378 * ------------------------------------------------------------------- * 379 * 380 * Write nr_sectors to the device starting from start_sector. 381 */ 382static int cf_cmd_write (uint32_t nr_sectors, uint32_t start_sector, void *buf) 383{ 384 uint32_t lba; 385 uint32_t count; 386 uint16_t *ptr_16; 387 uint8_t *ptr_8; 388 int error; 389 | 364 return (0); 365} 366 367 368/* ------------------------------------------------------------------- * 369 * cf_cmd_write() * 370 * ------------------------------------------------------------------- * 371 * 372 * Write nr_sectors to the device starting from start_sector. 373 */ 374static int cf_cmd_write (uint32_t nr_sectors, uint32_t start_sector, void *buf) 375{ 376 uint32_t lba; 377 uint32_t count; 378 uint16_t *ptr_16; 379 uint8_t *ptr_8; 380 int error; 381 |
390//#define OCTEON_VISUAL_CF_1 1 391#ifdef OCTEON_VISUAL_CF_1 392 octeon_led_write_char(1, 'W'); 393#endif | |
394 lba = start_sector; 395 ptr_8 = (uint8_t*)buf; 396 ptr_16 = (uint16_t*)buf; 397 398 while (nr_sectors--) { 399 error = cf_send_cmd(lba, CMD_WRITE_SECTOR); 400 if (error != 0) { 401 printf("%s: cf_send_cmd(CMD_WRITE_SECTOR) failed: %d\n", __func__, error); --- 18 unchanged lines hidden (view full) --- 420 if ((count & 0xf) == 0) 421 (void)cf_inb_16(TF_STATUS); 422 } 423 break; 424 } 425 426 lba++; 427 } | 382 lba = start_sector; 383 ptr_8 = (uint8_t*)buf; 384 ptr_16 = (uint16_t*)buf; 385 386 while (nr_sectors--) { 387 error = cf_send_cmd(lba, CMD_WRITE_SECTOR); 388 if (error != 0) { 389 printf("%s: cf_send_cmd(CMD_WRITE_SECTOR) failed: %d\n", __func__, error); --- 18 unchanged lines hidden (view full) --- 408 if ((count & 0xf) == 0) 409 (void)cf_inb_16(TF_STATUS); 410 } 411 break; 412 } 413 414 lba++; 415 } |
428#ifdef OCTEON_VISUAL_CF_1 429 octeon_led_write_char(1, ' '); 430#endif | |
431 return (0); 432} 433 434 435/* ------------------------------------------------------------------- * 436 * cf_cmd_identify() * 437 * ------------------------------------------------------------------- * 438 * --- 99 unchanged lines hidden (view full) --- 538 * This code originally spun on DRQ. If that behavior turns out to be 539 * necessary, a flag can be added or this function can be called 540 * repeatedly as long as it is returning ENXIO. 541 */ 542static int cf_wait_busy (void) 543{ 544 uint8_t status; 545 | 416 return (0); 417} 418 419 420/* ------------------------------------------------------------------- * 421 * cf_cmd_identify() * 422 * ------------------------------------------------------------------- * 423 * --- 99 unchanged lines hidden (view full) --- 523 * This code originally spun on DRQ. If that behavior turns out to be 524 * necessary, a flag can be added or this function can be called 525 * repeatedly as long as it is returning ENXIO. 526 */ 527static int cf_wait_busy (void) 528{ 529 uint8_t status; 530 |
546//#define OCTEON_VISUAL_CF_2 1 547#ifdef OCTEON_VISUAL_CF_2 548 static int where0 = 0; 549 550 octeon_led_run_wheel(&where0, 2); 551#endif 552 | |
553 switch (bus_type) 554 { 555 case CF_8: 556 case CF_TRUE_IDE_8: 557 status = cf_inb_8(TF_STATUS); 558 while ((status & STATUS_BSY) == STATUS_BSY) { 559 if ((status & STATUS_DF) != 0) { 560 printf("%s: device fault (status=%x)\n", __func__, status); --- 19 unchanged lines hidden (view full) --- 580 581 /* DRQ is only for when read data is actually available; check BSY */ 582 /* Some vendors do assert DRQ, but not all. Check BSY instead. */ 583 if (status & STATUS_BSY) { 584 printf("%s: device not ready (status=%x)\n", __func__, status); 585 return (ENXIO); 586 } 587 | 531 switch (bus_type) 532 { 533 case CF_8: 534 case CF_TRUE_IDE_8: 535 status = cf_inb_8(TF_STATUS); 536 while ((status & STATUS_BSY) == STATUS_BSY) { 537 if ((status & STATUS_DF) != 0) { 538 printf("%s: device fault (status=%x)\n", __func__, status); --- 19 unchanged lines hidden (view full) --- 558 559 /* DRQ is only for when read data is actually available; check BSY */ 560 /* Some vendors do assert DRQ, but not all. Check BSY instead. */ 561 if (status & STATUS_BSY) { 562 printf("%s: device not ready (status=%x)\n", __func__, status); 563 return (ENXIO); 564 } 565 |
588#ifdef OCTEON_VISUAL_CF_2 589 octeon_led_write_char(2, ' '); 590#endif | |
591 return (0); 592} 593 594/* ------------------------------------------------------------------- * 595 * cf_swap_ascii() * 596 * ------------------------------------------------------------------- * 597 * 598 * The ascii string returned by the controller specifying --- 162 unchanged lines hidden --- | 566 return (0); 567} 568 569/* ------------------------------------------------------------------- * 570 * cf_swap_ascii() * 571 * ------------------------------------------------------------------- * 572 * 573 * The ascii string returned by the controller specifying --- 162 unchanged lines hidden --- |