[PATCH 01/62] arm/gp32/smc/smc.c: Fix warnings and clean up

Joel Sherrill joel.sherrill at oarcorp.com
Wed Oct 15 19:59:51 UTC 2014


---
 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



More information about the devel mailing list