| Index: embios/trunk/tools/embios.py | 
| — | — | @@ -360,12 +360,13 @@ | 
| 361 | 361 |  | 
| 362 | 362 | elif argv[1] == "readrawbootflash": | 
| 363 | 363 | if len(argv) != 5: usage() | 
| 364 |  | -    dev.readrawbootflash(int(argv[2]), int(argv[3]), int(argv[4]))
 | 
|  | 364 | +    dev.readrawbootflash(int(argv[2], 16), int(argv[3], 16), int(argv[4], 16)) | 
| 365 | 365 |  | 
| 366 | 366 | elif argv[1] == "writerawbootflash": | 
| 367 | 367 | if len(argv) != 5: usage() | 
| 368 |  | -    dev.writerawbootflash(int(argv[2]), int(argv[3]), int(argv[4]))
 | 
| 369 |  | -    
 | 
|  | 368 | +    dev.writerawbootflash(int(argv[2], 16), int(argv[3], 16), int(argv[4], 16)) | 
|  | 369 | + | 
|  | 370 | + | 
| 370 | 371 | elif argv[1] == "flushcaches": | 
| 371 | 372 | if len(argv) != 2: usage() | 
| 372 | 373 | dev.flushcaches() | 
| Index: embios/trunk/tools/libembios.py | 
| — | — | @@ -258,13 +258,15 @@ | 
| 259 | 259 |  | 
| 260 | 260 | # correct alignment | 
| 261 | 261 | while (offset & 0xF) != 0: | 
| 262 |  | -      blocklen = (0x10 - offset % 0x10)
 | 
| 263 |  | -      
 | 
|  | 262 | +      blocklen = size | 
|  | 263 | + | 
| 264 | 264 | if (blocklen > size): | 
| 265 | 265 | blocklen = size | 
| 266 | 266 | if (blocklen > self.cout_maxsize - 0x10): | 
| 267 |  | -        blocklen = self.cout_maxsize
 | 
|  | 267 | +        blocklen = self.cout_maxsize - 0x10 | 
| 268 | 268 |  | 
|  | 269 | +      blocklen = (blocklen & 0xFFFFFFF0) +  (offset & 0xF) | 
|  | 270 | + | 
| 269 | 271 | self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 5, offset, blocklen, 0) + data[boffset:boffset+blocklen]) | 
| 270 | 272 | response = self.__getbulk(self.handle, self.__cinep, 0x10) | 
| 271 | 273 | self.__checkstatus(response) | 
| — | — | @@ -274,11 +276,11 @@ | 
| 275 | 277 | size -= blocklen | 
| 276 | 278 |  | 
| 277 | 279 | # write data with DMA, if it makes sense (-> much data) and isn't forbidden | 
| 278 |  | -    if (usedma): 
 | 
|  | 280 | +    if (usedma) and (size > 2 * (self.cout_maxsize - 16)): | 
| 279 | 281 | if (freezesched): | 
| 280 |  | -        self.freezescheduler(1)
 | 
|  | 282 | +        self.freezescheduler(1, 0) | 
| 281 | 283 |  | 
| 282 |  | -      while (size > 0x1F):
 | 
|  | 284 | +      while (size > (self.cout_maxsize - 16)): | 
| 283 | 285 | blocklen = size | 
| 284 | 286 |  | 
| 285 | 287 | if (blocklen > self.dout_maxsize): | 
| — | — | @@ -295,7 +297,7 @@ | 
| 296 | 298 | size -= blocklen | 
| 297 | 299 |  | 
| 298 | 300 | if (freezesched): | 
| 299 |  | -        self.freezescheduler(0)
 | 
|  | 301 | +        self.freezescheduler(0, 0) | 
| 300 | 302 |  | 
| 301 | 303 | # write rest of data | 
| 302 | 304 | while (size > 0): | 
| — | — | @@ -302,7 +304,7 @@ | 
| 303 | 305 | blocklen = size | 
| 304 | 306 |  | 
| 305 | 307 | if (blocklen > self.cout_maxsize - 0x10): | 
| 306 |  | -        blocklen = self.cout_maxsize
 | 
|  | 308 | +        blocklen = self.cout_maxsize - 0x10 | 
| 307 | 309 |  | 
| 308 | 310 | self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 5, offset, blocklen, 0) + data[boffset:boffset+blocklen]) | 
| 309 | 311 | response = self.__getbulk(self.handle, self.__cinep, 0x10) | 
| — | — | @@ -321,12 +323,14 @@ | 
| 322 | 324 |  | 
| 323 | 325 | # correct alignment | 
| 324 | 326 | while (offset & 0xF) != 0: | 
| 325 |  | -      blocklen = (0x10 - offset % 0x10)
 | 
|  | 327 | +      blocklen = size | 
| 326 | 328 |  | 
| 327 | 329 | if (blocklen > size): | 
| 328 | 330 | blocklen = size | 
| 329 | 331 | if (blocklen > self.cin_maxsize - 0x10): | 
| 330 |  | -        blocklen = self.cin_maxsize
 | 
|  | 332 | +        blocklen = self.cin_maxsize - 0x10 | 
|  | 333 | + | 
|  | 334 | +      blocklen = (blocklen & 0xFFFFFFF0) +  (offset & 0xF) | 
| 331 | 335 |  | 
| 332 | 336 | self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 4, offset, blocklen, 0)) | 
| 333 | 337 | response = self.__getbulk(self.handle, self.__cinep, 0x10 + blocklen) | 
| — | — | @@ -338,11 +342,11 @@ | 
| 339 | 343 | size -= blocklen | 
| 340 | 344 |  | 
| 341 | 345 | # read data with DMA, if it makes sense (-> much data) and isn't forbidden | 
| 342 |  | -    if (usedma):
 | 
|  | 346 | +    if (usedma) and (size > 2 * (self.cin_maxsize - 16)): | 
| 343 | 347 | if (freezesched): | 
| 344 |  | -        self.freezescheduler(1)
 | 
|  | 348 | +        self.freezescheduler(1, 0) | 
| 345 | 349 |  | 
| 346 |  | -      while (size > 0x1F):
 | 
|  | 350 | +      while (size > (self.cin_maxsize - 16)): | 
| 347 | 351 | blocklen = size | 
| 348 | 352 |  | 
| 349 | 353 | if (blocklen > self.din_maxsize): | 
| — | — | @@ -358,7 +362,7 @@ | 
| 359 | 363 | size -= blocklen | 
| 360 | 364 |  | 
| 361 | 365 | if (freezesched): | 
| 362 |  | -        self.freezescheduler(0)
 | 
|  | 366 | +        self.freezescheduler(0, 0) | 
| 363 | 367 |  | 
| 364 | 368 | # read rest of data | 
| 365 | 369 | while (size > 0): | 
| — | — | @@ -365,7 +369,7 @@ | 
| 366 | 370 | blocklen = size | 
| 367 | 371 |  | 
| 368 | 372 | if (blocklen > self.cin_maxsize - 0x10): | 
| 369 |  | -        blocklen = self.cin_maxsize
 | 
|  | 373 | +        blocklen = self.cin_maxsize - 0x10 | 
| 370 | 374 |  | 
| 371 | 375 | self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 4, offset, blocklen, 0)) | 
| 372 | 376 | response = self.__getbulk(self.handle, self.__cinep, 0x10 + blocklen) |