---
 c/src/lib/libbsp/arm/gp32/smc/smc.c | 606 +++++++++++++++++-------------------
 1 file changed, 287 insertions(+), 319 deletions(-)

diff --git a/c/src/lib/libbsp/arm/gp32/smc/smc.c 
b/c/src/lib/libbsp/arm/gp32/smc/smc.c
index 9cf460b..425a1df 100644
--- a/c/src/lib/libbsp/arm/gp32/smc/smc.c
+++ b/c/src/lib/libbsp/arm/gp32/smc/smc.c
@@ -1,9 +1,10 @@
-/* smc.c -- s3c2400 smc disk block device implementation
-
- Squidge's SMC Low-level access routines.
- Inspired and derived from routines provided by Samsung Electronics M/M R&D 
Center & FireFly.
-
-*/
+/*
+ * s3c2400 smc disk block device implementation
+ *
+ * Squidge's SMC Low-level access routines.
+ * Inspired and derived from routines provided by Samsung Electronics
+ *  M/M R&D Center & FireFly.
+ */
 
 #include <rtems.h>
 #include <rtems/libio.h>
@@ -20,37 +21,36 @@
 #include <s3c24xx.h>
 
 #define SMC_DEVICE_NAME "/dev/smc"
-#define SMC_SAMSUNG_ID         0xEC
-#define SMC_TOSHIBA_ID         0x98
+#define SMC_SAMSUNG_ID    0xEC
+#define SMC_TOSHIBA_ID    0x98
 
-#define SMC_16MB       0x73
-#define SMC_32MB       0x75
-#define SMC_64MB       0x76
-#define SMC_128MB      0x79
+#define SMC_16MB  0x73
+#define SMC_32MB  0x75
+#define SMC_64MB  0x76
+#define SMC_128MB  0x79
 
-#define LBA_UNUSED             0x80000000
-#define LBA_RESERVED           0x80000001
+#define LBA_UNUSED      0x80000000
+#define LBA_RESERVED    0x80000001
 
-#define BLOCK_UNUSED           0x80000000
-#define BLOCK_RESERVED         0x80000001
+#define BLOCK_UNUSED    0x80000000
+#define BLOCK_RESERVED  0x80000001
 
 /* SmartMedia Command */
-#define SEQ_DATA_INPUT_CMD     0x80
-#define READ1_CMD              0x00
-#define READ1_1_CMD            0x01
-#define READ2_CMD              0x50
-#define READ_ID_CMD            0x90
-#define RESET_CMD              0xFF
-#define PAGE_PROGRAM_CMD       0x10
-#define BLOCK_ERASE_CMD                0x60
-#define BLOCK_ERASE_CFM_CMD    0xD0
-#define READ_STATUS_CMD                0x70
-#define RESET_PTR_CMD          0x00
+#define SEQ_DATA_INPUT_CMD   0x80
+#define READ1_CMD            0x00
+#define READ1_1_CMD          0x01
+#define READ2_CMD            0x50
+#define READ_ID_CMD          0x90
+#define RESET_CMD            0xFF
+#define PAGE_PROGRAM_CMD     0x10
+#define BLOCK_ERASE_CMD      0x60
+#define BLOCK_ERASE_CFM_CMD  0xD0
+#define READ_STATUS_CMD      0x70
+#define RESET_PTR_CMD        0x00
 
 
 /* Internal SMC disk descriptor */
-struct SMC_INFO
-{
+struct SMC_INFO {
   uint8_t  id[3];
   uint32_t bytes_per_page;
   uint32_t pages_per_block;
@@ -112,7 +112,7 @@ static uint8_t sm_read(void)
    returns 1 on success, 0 on fail
 */
 #if UNUSED
-static uint8_t sm_status()
+static static uint8_t sm_status()
 {
   uint8_t status;
 
@@ -133,9 +133,8 @@ static uint8_t sm_status()
 }
 #endif
 
-void smc_read_id( uint8_t* buf, uint32_t length)
+static void smc_read_id( uint8_t* buf, uint32_t length)
 {
-
   uint32_t i;
 
   sm_chip_en();
@@ -160,58 +159,57 @@ void smc_read_id( uint8_t* buf, uint32_t length)
 }
 
 /* read an entire logical page of 512 bytes.*/
-uint8_t smc_read_page (uint32_t lpage, uint8_t* buf)
+static uint8_t smc_read_page (uint32_t lpage, uint8_t* buf)
 {
-       uint32_t block, page, i;
-
-       /* convert logical block to physical block
-          and then convert into page suitable for read1 command...
-       */
-       block = lpage >> 5;
-       if (smc_l2p[block] < LBA_UNUSED) {
-               page = smc_l2p[block] << 5;
-               page += (lpage & 0x1F);
-       }
-       else
-               return 0;
-
-       sm_chip_en();
-
-       sm_cle_en();
-       sm_write_en();
-       sm_write(READ1_CMD);
-       sm_write_dis();
-       sm_cle_dis();
-
-                       sm_ale_en();
-                       sm_write_en();
-                       sm_write( 0x00);
-                       sm_write( (uint8_t)(page >> 0));
-                       sm_write( (uint8_t)(page >> 8));
-                       if (smc_info.mb >= 64) sm_write( (uint8_t)(page >> 16));
-                       sm_write_dis();
-                       sm_ale_dis();
-
-                       sm_busy();
-
-                       sm_read_en();
-                       for (i = 0; i < 512; i++)
-                       {
-                               *buf = sm_read();
-                               buf++;
-                       }
-                       sm_read_dis();
-                       sm_chip_dis();
-
-                       sm_busy();
-       return 1;
+  uint32_t block, page, i;
+
+  /* convert logical block to physical block
+     and then convert into page suitable for read1 command...
+  */
+  block = lpage >> 5;
+  if (smc_l2p[block] < LBA_UNUSED) {
+    page = smc_l2p[block] << 5;
+    page += (lpage & 0x1F);
+  }
+  else
+    return 0;
+
+  sm_chip_en();
+
+  sm_cle_en();
+  sm_write_en();
+  sm_write(READ1_CMD);
+  sm_write_dis();
+  sm_cle_dis();
+
+  sm_ale_en();
+  sm_write_en();
+  sm_write( 0x00);
+  sm_write( (uint8_t)(page >> 0));
+  sm_write( (uint8_t)(page >> 8));
+  if (smc_info.mb >= 64)
+    sm_write( (uint8_t)(page >> 16));
+  sm_write_dis();
+  sm_ale_dis();
+
+  sm_busy();
+
+  sm_read_en();
+  for (i = 0; i < 512; i++) {
+    *buf = sm_read();
+    buf++;
+  }
+  sm_read_dis();
+  sm_chip_dis();
+
+  sm_busy();
+  return 1;
 }
 
-void smc_read_spare( uint32_t page, uint8_t* buf, uint8_t length)
+static void smc_read_spare( uint32_t page, uint8_t* buf, uint8_t length)
 {
   uint32_t i;
 
-
   sm_chip_en();
 
   sm_cle_en();
@@ -225,21 +223,23 @@ void smc_read_spare( uint32_t page, uint8_t* buf, uint8_t 
length)
   sm_write( 0x00);
   sm_write( (uint8_t)(page >> 0));
   sm_write( (uint8_t)(page >> 8));
-  if (smc_info.mb >= 64) sm_write( (uint8_t)(page >> 16));
+  if (smc_info.mb >= 64)
+    sm_write( (uint8_t)(page >> 16));
   sm_read_en();
   sm_ale_dis();
 
   sm_busy();
 
   sm_read_en();
-  for (i=0;i<length;i++) *(buf+i) = sm_read();
+  for (i=0;i<length;i++)
+    *(buf+i) = sm_read();
   sm_read_dis();
 
   sm_chip_dis();
 
 }
 
-void smc_make_l2p(void)
+static void smc_make_l2p(void)
 {
   uint32_t pblock, i, j, lblock, zone, count, cnt1, cnt2, cnt3;
   uint8_t data[512];
@@ -248,47 +248,39 @@ void smc_make_l2p(void)
   cnt2 = 0;
   cnt3 = 0;
 
-  for (i=0;i<0x2000;i++)
-  {
+  for (i=0;i<0x2000;i++) {
     smc_l2p[i] = LBA_RESERVED;
     smc_p2l[i] = BLOCK_RESERVED;
   }
-  for (pblock=0;pblock<smc_info.blocks;pblock++)
-  {
+
+  for (pblock=0;pblock<smc_info.blocks;pblock++) {
     /* read physical block - first page */
     smc_read_spare( pblock*smc_info.pages_per_block, (uint8_t*)&data, 16);
 
     zone = pblock >> 10; /* divide by 1024 to get zone */
-    if ((data[5] == 0xFF) && ((data[6]&0xF8) == 0x10))
-    {
+    if ((data[5] == 0xFF) && ((data[6]&0xF8) == 0x10)) {
       lblock = ((((data[6]<<8)|(data[7]<<0)) >> 1) & 0x03FF) + (zone * 1000);
       smc_l2p[lblock] = pblock;
       smc_p2l[pblock] = lblock;
       cnt1++;
-    }
-    else
-    {
+    } else {
       count = 0;
-      for (j=0;j<16;j++)
-      {
+      for (j=0;j<16;j++) {
         if (data[j] == 0xFF) count++;
       }
-      if (count == 16)
-      {
-       smc_p2l[pblock] = BLOCK_UNUSED;
-       cnt2++;
-      }
-      else
-      {
-       smc_p2l[pblock] = BLOCK_RESERVED;
-       cnt3++;
+      if (count == 16) {
+        smc_p2l[pblock] = BLOCK_UNUSED;
+        cnt2++;
+      } else {
+        smc_p2l[pblock] = BLOCK_RESERVED;
+        cnt3++;
       }
     }
   }
 }
 
 
-void smc_detect( uint8_t id1, uint8_t id2, uint8_t id3)
+static void smc_detect( uint8_t id1, uint8_t id2, uint8_t id3)
 {
   smc_info.id[0] = id1;
   smc_info.id[1] = id2;
@@ -298,13 +290,10 @@ void smc_detect( uint8_t id1, uint8_t id2, uint8_t id3)
   smc_info.pages_per_block = 0;
   smc_info.blocks          = 0;
 
-  switch (id1)
-  {
+  switch (id1) {
     case SMC_SAMSUNG_ID:
-    case SMC_TOSHIBA_ID:
-    {
-      switch (id2)
-      {
+    case SMC_TOSHIBA_ID: {
+      switch (id2) {
         case SMC_16MB  : smc_info.mb = 16; break;
         case SMC_32MB  : smc_info.mb = 32; break;
         case SMC_64MB  : smc_info.mb = 64; break;
@@ -314,8 +303,7 @@ void smc_detect( uint8_t id1, uint8_t id2, uint8_t id3)
     }
   }
 
-  switch (smc_info.mb)
-  {
+  switch (smc_info.mb) {
     case 16  : smc_info.bytes_per_page = 512; smc_info.pages_per_block = 32; 
smc_info.blocks = 0x0400; break;
     case 32  : smc_info.bytes_per_page = 512; smc_info.pages_per_block = 32; 
smc_info.blocks = 0x0800; break;
     case 64  : smc_info.bytes_per_page = 512; smc_info.pages_per_block = 32; 
smc_info.blocks = 0x1000; break;
@@ -323,220 +311,200 @@ void smc_detect( uint8_t id1, uint8_t id2, uint8_t id3)
   }
 }
 
-void smc_init( void)
+static void smc_init( void)
 {
-       unsigned char buf[32];
-       int i;
-
-       /* reset smc */
-       sm_chip_en();
-       sm_cle_en();
-       sm_write_en();
-       sm_write(0xFF);
-       sm_write_dis();
-       sm_cle_dis();
-       for(i=0;i<10;i++);
-       sm_busy();
-       sm_chip_dis();
-
-       smc_read_id (buf, 4);
-       smc_detect (buf[0], buf[1], buf[2]);
-       printk ("SMC: [%02X-%02X-%02X-%02X]\n", buf[0], buf[1], buf[2], buf[3]);
-       printk ("SMC size: %dMB detected\n",smc_info.mb);
-       smc_make_l2p();
+  unsigned char buf[32];
+  int i;
+
+  /* reset smc */
+  sm_chip_en();
+  sm_cle_en();
+  sm_write_en();
+  sm_write(0xFF);
+  sm_write_dis();
+  sm_cle_dis();
+  for(i=0;i<10;i++);
+  sm_busy();
+  sm_chip_dis();
+
+  smc_read_id (buf, 4);
+  smc_detect (buf[0], buf[1], buf[2]);
+  printk ("SMC: [%02X-%02X-%02X-%02X]\n", buf[0], buf[1], buf[2], buf[3]);
+  printk ("SMC size: %dMB detected\n",smc_info.mb);
+  smc_make_l2p();
 }
 
 /**********
  * Function: sm_ECCEncode (completely ripped, unaltered, from the samsung 
routines)
  * Remark:
- *     - adopted from "ECC Algorithm for SmartMedia V3.0"
- *             by Memory Product & Technology, Samsung Electronics Co. 
(ecc30.pdf)
+ *  - adopted from "ECC Algorithm for SmartMedia V3.0"
+ *    by Memory Product & Technology, Samsung Electronics Co. (ecc30.pdf)
  **********/
 int sm_ECCEncode(const uint8_t * p_buf, uint8_t * p_ecc)
 {
-       uint32_t i, j;
-       uint8_t paritr[256], tmp = 0, tmp2 = 0;
-       uint8_t data_table0[16] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 
1, 0 };
-       uint8_t data_table1[16] = { 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 
0, 1 };
-       uint8_t sum = 0, paritc = 0;
-       uint8_t parit0c = 0, parit1c = 0, parit2c = 0, parit3c = 0;
-       uint8_t parit4c = 0, parit5c = 0, parit6c = 0, parit7c = 0;
-       uint8_t parit1_1, parit1_2, parit2_1, parit2_2, parit4_1, parit4_2;
-       uint8_t parit8_1 = 0, parit8_2 = 0, parit16_1 = 0, parit16_2 = 0, 
parit32_1 = 0, parit32_2 = 0;
-       uint8_t parit64_1 = 0, parit64_2 = 0, parit128_1 = 0, parit128_2 = 0, 
parit256_1 = 0, parit256_2 = 0;
-       uint8_t parit512_1 = 0, parit512_2 = 0, parit1024_1 = 0, parit1024_2 = 
0;
-       uint8_t* paritr_ptr;
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; ++i, ++paritr_ptr, ++p_buf)
-       {
-               paritc ^= *p_buf;
-               tmp = (*p_buf & 0xf0) >> 4;
-               tmp2 = *p_buf & 0x0f;
-
-               switch (tmp)
-               {
-                       case 0:
-                       case 3:
-                       case 5:
-                       case 6:
-                       case 9:
-                       case 10:
-                       case 12:
-                       case 15:
-                               *paritr_ptr = *(data_table0 + tmp2);
-                               break;
-
-                       case 1:
-                       case 2:
-                       case 4:
-                       case 7:
-                       case 8:
-                       case 11:
-                       case 13:
-                       case 14:
-                               *paritr_ptr = *(data_table1 + tmp2);
-                               break;
-               }
-       }
-
-       parit0c = (paritc & 0x01) ? 1 : 0;
-       parit1c = (paritc & 0x02) ? 1 : 0;
-       parit2c = (paritc & 0x04) ? 1 : 0;
-       parit3c = (paritc & 0x08) ? 1 : 0;
-       parit4c = (paritc & 0x10) ? 1 : 0;
-       parit5c = (paritc & 0x20) ? 1 : 0;
-       parit6c = (paritc & 0x40) ? 1 : 0;
-       parit7c = (paritc & 0x80) ? 1 : 0;
-       parit1_2 = parit6c ^ parit4c ^ parit2c ^ parit0c;
-       parit1_1 = parit7c ^ parit5c ^ parit3c ^ parit1c;
-       parit2_2 = parit5c ^ parit4c ^ parit1c ^ parit0c;
-       parit2_1 = parit7c ^ parit6c ^ parit3c ^ parit2c;
-       parit4_2 = parit3c ^ parit2c ^ parit1c ^ parit0c;
-       parit4_1 = parit7c ^ parit6c ^ parit5c ^ parit4c;
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; ++i, ++paritr_ptr)
-       {
-               sum ^= *paritr_ptr;
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 2, paritr_ptr += 2)
-       {
-               parit8_2 ^= *paritr_ptr;
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 4, paritr_ptr += 4)
-       {
-               parit16_2 ^= *paritr_ptr;
-               parit16_2 ^= *(paritr_ptr + 1);
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 8, paritr_ptr += 8)
-       {
-               for (j = 0; j <= 3; ++j)
-               {
-                       parit32_2 ^= *(paritr_ptr + j);
-               }
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 16, paritr_ptr += 16)
-       {
-               for (j = 0; j <= 7; ++j)
-               {
-                       parit64_2 ^= *(paritr_ptr + j);
-               }
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 32, paritr_ptr += 32)
-       {
-               for (j = 0; j <= 15; ++j)
-               {
-                       parit128_2 ^= *(paritr_ptr + j);
-               }
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 64, paritr_ptr += 64)
-       {
-               for (j = 0; j <= 31; ++j)
-               {
-                       parit256_2 ^= *(paritr_ptr + j);
-               }
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 128, paritr_ptr += 128)
-       {
-               for (j = 0; j <= 63; ++j)
-               {
-                       parit512_2 ^= *(paritr_ptr + j);
-               }
-       }
-
-       paritr_ptr = paritr;
-       for (i = 0; i < 256; i += 256, paritr_ptr += 256)
-       {
-               for (j = 0; j <= 127; ++j)
-               {
-                       parit1024_2 ^= *(paritr_ptr + j);
-               }
-       }
-
-       if (sum==0)
-       {
-               parit1024_1 = parit1024_2;
-               parit512_1 = parit512_2;
-               parit256_1 = parit256_2;
-               parit128_1 = parit128_2;
-               parit64_1 = parit64_2;
-               parit32_1 = parit32_2;
-               parit16_1 = parit16_2;
-               parit8_1 = parit8_2;
-       }
-       else
-       {
-               parit1024_1 = parit1024_2 ? 0 : 1;
-               parit512_1 = parit512_2 ? 0 : 1;
-               parit256_1 = parit256_2 ? 0 : 1;
-               parit128_1 = parit128_2 ? 0 : 1;
-               parit64_1 = parit64_2 ? 0 : 1;
-               parit32_1 = parit32_2 ? 0 : 1;
-               parit16_1 = parit16_2 ? 0 : 1;
-               parit8_1 = parit8_2 ? 0 : 1;
-       }
-
-       parit1_2 <<= 2;
-       parit1_1 <<= 3;
-       parit2_2 <<= 4;
-       parit2_1 <<= 5;
-       parit4_2 <<= 6;
-       parit4_1 <<= 7;
-       parit128_1 <<= 1;
-       parit256_2 <<= 2;
-       parit256_1 <<= 3;
-       parit512_2 <<= 4;
-       parit512_1 <<= 5;
-       parit1024_2 <<= 6;
-       parit1024_1 <<= 7;
-       parit8_1 <<= 1;
-       parit16_2 <<= 2;
-       parit16_1 <<= 3;
-       parit32_2 <<= 4;
-       parit32_1 <<= 5;
-       parit64_2 <<= 6;
-       parit64_1 <<= 7;
-
-       p_ecc[0] = ~(parit64_1 | parit64_2 | parit32_1 | parit32_2 | parit16_1 
| parit16_2 | parit8_1 | parit8_2);
-       p_ecc[1] = ~(parit1024_1 |parit1024_2 | parit512_1 | parit512_2 | 
parit256_1 | parit256_2 | parit128_1 | parit128_2);
-       p_ecc[2] = ~(parit4_1 | parit4_2 | parit2_1 | parit2_2 | parit1_1 | 
parit1_2);
-
-       return 0;
+  uint32_t i, j;
+  uint8_t paritr[256], tmp = 0, tmp2 = 0;
+  uint8_t data_table0[16] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 };
+  uint8_t data_table1[16] = { 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1 };
+  uint8_t sum = 0, paritc = 0;
+  uint8_t parit0c = 0, parit1c = 0, parit2c = 0, parit3c = 0;
+  uint8_t parit4c = 0, parit5c = 0, parit6c = 0, parit7c = 0;
+  uint8_t parit1_1, parit1_2, parit2_1, parit2_2, parit4_1, parit4_2;
+  uint8_t parit8_1 = 0, parit8_2 = 0, parit16_1 = 0, parit16_2 = 0, parit32_1 
= 0, parit32_2 = 0;
+  uint8_t parit64_1 = 0, parit64_2 = 0, parit128_1 = 0, parit128_2 = 0, 
parit256_1 = 0, parit256_2 = 0;
+  uint8_t parit512_1 = 0, parit512_2 = 0, parit1024_1 = 0, parit1024_2 = 0;
+  uint8_t* paritr_ptr;
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; ++i, ++paritr_ptr, ++p_buf) {
+    paritc ^= *p_buf;
+    tmp = (*p_buf & 0xf0) >> 4;
+    tmp2 = *p_buf & 0x0f;
+
+    switch (tmp) {
+      case 0:
+      case 3:
+      case 5:
+      case 6:
+      case 9:
+      case 10:
+      case 12:
+      case 15:
+        *paritr_ptr = *(data_table0 + tmp2);
+        break;
+
+      case 1:
+      case 2:
+      case 4:
+      case 7:
+      case 8:
+      case 11:
+      case 13:
+      case 14:
+        *paritr_ptr = *(data_table1 + tmp2);
+        break;
+    }
+  }
+
+  parit0c = (paritc & 0x01) ? 1 : 0;
+  parit1c = (paritc & 0x02) ? 1 : 0;
+  parit2c = (paritc & 0x04) ? 1 : 0;
+  parit3c = (paritc & 0x08) ? 1 : 0;
+  parit4c = (paritc & 0x10) ? 1 : 0;
+  parit5c = (paritc & 0x20) ? 1 : 0;
+  parit6c = (paritc & 0x40) ? 1 : 0;
+  parit7c = (paritc & 0x80) ? 1 : 0;
+  parit1_2 = parit6c ^ parit4c ^ parit2c ^ parit0c;
+  parit1_1 = parit7c ^ parit5c ^ parit3c ^ parit1c;
+  parit2_2 = parit5c ^ parit4c ^ parit1c ^ parit0c;
+  parit2_1 = parit7c ^ parit6c ^ parit3c ^ parit2c;
+  parit4_2 = parit3c ^ parit2c ^ parit1c ^ parit0c;
+  parit4_1 = parit7c ^ parit6c ^ parit5c ^ parit4c;
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; ++i, ++paritr_ptr) {
+    sum ^= *paritr_ptr;
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 2, paritr_ptr += 2) {
+    parit8_2 ^= *paritr_ptr;
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 4, paritr_ptr += 4) {
+    parit16_2 ^= *paritr_ptr;
+    parit16_2 ^= *(paritr_ptr + 1);
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 8, paritr_ptr += 8) {
+    for (j = 0; j <= 3; ++j) {
+      parit32_2 ^= *(paritr_ptr + j);
+    }
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 16, paritr_ptr += 16) {
+    for (j = 0; j <= 7; ++j) {
+      parit64_2 ^= *(paritr_ptr + j);
+    }
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 32, paritr_ptr += 32) {
+    for (j = 0; j <= 15; ++j) {
+      parit128_2 ^= *(paritr_ptr + j);
+    }
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 64, paritr_ptr += 64) {
+    for (j = 0; j <= 31; ++j) {
+      parit256_2 ^= *(paritr_ptr + j);
+    }
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 128, paritr_ptr += 128) {
+    for (j = 0; j <= 63; ++j) {
+      parit512_2 ^= *(paritr_ptr + j);
+    }
+  }
+
+  paritr_ptr = paritr;
+  for (i = 0; i < 256; i += 256, paritr_ptr += 256) {
+    for (j = 0; j <= 127; ++j) {
+      parit1024_2 ^= *(paritr_ptr + j);
+    }
+  }
+
+  if (sum==0) {
+    parit1024_1 = parit1024_2;
+    parit512_1 = parit512_2;
+    parit256_1 = parit256_2;
+    parit128_1 = parit128_2;
+    parit64_1 = parit64_2;
+    parit32_1 = parit32_2;
+    parit16_1 = parit16_2;
+    parit8_1 = parit8_2;
+  } else {
+    parit1024_1 = parit1024_2 ? 0 : 1;
+    parit512_1 = parit512_2 ? 0 : 1;
+    parit256_1 = parit256_2 ? 0 : 1;
+    parit128_1 = parit128_2 ? 0 : 1;
+    parit64_1 = parit64_2 ? 0 : 1;
+    parit32_1 = parit32_2 ? 0 : 1;
+    parit16_1 = parit16_2 ? 0 : 1;
+    parit8_1 = parit8_2 ? 0 : 1;
+  }
+
+  parit1_2 <<= 2;
+  parit1_1 <<= 3;
+  parit2_2 <<= 4;
+  parit2_1 <<= 5;
+  parit4_2 <<= 6;
+  parit4_1 <<= 7;
+  parit128_1 <<= 1;
+  parit256_2 <<= 2;
+  parit256_1 <<= 3;
+  parit512_2 <<= 4;
+  parit512_1 <<= 5;
+  parit1024_2 <<= 6;
+  parit1024_1 <<= 7;
+  parit8_1 <<= 1;
+  parit16_2 <<= 2;
+  parit16_1 <<= 3;
+  parit32_2 <<= 4;
+  parit32_1 <<= 5;
+  parit64_2 <<= 6;
+  parit64_1 <<= 7;
+
+  p_ecc[0] = ~(parit64_1 | parit64_2 | parit32_1 | parit32_2 | parit16_1 | 
parit16_2 | parit8_1 | parit8_2);
+  p_ecc[1] = ~(parit1024_1 |parit1024_2 | parit512_1 | parit512_2 | parit256_1 
| parit256_2 | parit128_1 | parit128_2);
+  p_ecc[2] = ~(parit4_1 | parit4_2 | parit2_1 | parit2_2 | parit1_1 | 
parit1_2);
+
+  return 0;
 }
 
 /* smc_write --
@@ -544,8 +512,8 @@ int sm_ECCEncode(const uint8_t * p_buf, uint8_t * p_ecc)
 */
 static int smc_write(rtems_blkdev_request *req)
 {
-       rtems_blkdev_request_done(req, RTEMS_SUCCESSFUL);
-       return 0;
+  rtems_blkdev_request_done(req, RTEMS_SUCCESSFUL);
+  return 0;
 }
 
 
@@ -570,7 +538,7 @@ smc_read(rtems_blkdev_request *req)
         int count = sg->length;
         if (count > remains)
             count = remains;
-       smc_read_page(sg->block,sg->buffer);
+        smc_read_page(sg->block,sg->buffer);
         remains -= count;
     }
     rtems_blkdev_request_done(req, RTEMS_SUCCESSFUL);
@@ -601,7 +569,7 @@ smc_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
                 case RTEMS_BLKDEV_REQ_READ:
                     return smc_read(r);
                 case RTEMS_BLKDEV_REQ_WRITE:
-                   return smc_write(r);
+                    return smc_write(r);
                 default:
                     errno = EINVAL;
                     return -1;
-- 
1.9.3

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to