Changeset 827d73f in mainline for uspace/srv/bd


Ignore:
Timestamp:
2010-02-12T14:09:22Z (16 years ago)
Author:
Lukas Mejdrech <lukasmejdrech@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a70bda4
Parents:
918e9910 (diff), e70edd1 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merged the actual head

Location:
uspace/srv/bd
Files:
4 added
5 deleted
8 edited
3 moved

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/ata_bd/Makefile

    r918e9910 r827d73f  
    2828#
    2929
    30 include Makefile.common
     30USPACE_PREFIX = ../../..
     31LIBS = $(LIBC_PREFIX)/libc.a
    3132
    32 .PHONY: all clean
     33OUTPUT = ata_bd
    3334
    34 all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
    35         -[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
    36         $(MAKE) -f Makefile.build
     35SOURCES = \
     36        ata_bd.c
    3737
    38 clean:
    39         rm -f $(DEPEND) $(DEPEND_PREV) $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm
    40         find . -name '*.o' -follow -exec rm \{\} \;
     38include ../../Makefile.common
  • uspace/srv/bd/ata_bd/ata_bd.c

    r918e9910 r827d73f  
    5959#include <devmap.h>
    6060#include <sys/types.h>
     61#include <inttypes.h>
    6162#include <errno.h>
    6263#include <bool.h>
     
    112113        printf(NAME ": ATA disk driver\n");
    113114
    114         printf("I/O address 0x%p/0x%p\n", ctl_physical, cmd_physical);
     115        printf("I/O address %p/%p\n", ctl_physical, cmd_physical);
    115116
    116117        if (ata_bd_init() != EOK)
     
    180181        }
    181182
    182         printf(" %llu blocks", d->blocks, d->blocks / (2 * 1024));
     183        printf(" %" PRIu64 " blocks", d->blocks, d->blocks / (2 * 1024));
    183184
    184185        mbytes = d->blocks / (2 * 1024);
    185186        if (mbytes > 0)
    186                 printf(" %llu MB.", mbytes);
     187                printf(" %" PRIu64 " MB.", mbytes);
    187188
    188189        printf("\n");
     
    296297                        ipc_answer_1(callid, EOK, block_size);
    297298                        continue;
     299                case BD_GET_NUM_BLOCKS:
     300                        ipc_answer_2(callid, EOK, LOWER32(disk[disk_id].blocks),
     301                            UPPER32(disk[disk_id].blocks));
     302                        continue;
    298303                default:
    299304                        retval = EINVAL;
     
    495500
    496501        d = &disk[disk_id];
    497         bc.h = 0;       /* Silence warning. */
     502       
     503        /* Silence warning. */
     504        memset(&bc, 0, sizeof(bc));
    498505
    499506        /* Compute block coordinates. */
     
    569576
    570577        d = &disk[disk_id];
    571         bc.h = 0;       /* Silence warning. */
     578       
     579        /* Silence warning. */
     580        memset(&bc, 0, sizeof(bc));
    572581
    573582        /* Compute block coordinates. */
  • uspace/srv/bd/file_bd/Makefile

    r918e9910 r827d73f  
    2828#
    2929
    30 include Makefile.common
     30USPACE_PREFIX = ../../..
     31LIBS = $(LIBC_PREFIX)/libc.a
    3132
    32 .PHONY: all clean
     33OUTPUT = file_bd
    3334
    34 all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
    35         -[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
    36         $(MAKE) -f Makefile.build
     35SOURCES = \
     36        file_bd.c
    3737
    38 clean:
    39         rm -f $(DEPEND) $(DEPEND_PREV) $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm
    40         find . -name '*.o' -follow -exec rm \{\} \;
     38include ../../Makefile.common
  • uspace/srv/bd/file_bd/file_bd.c

    r918e9910 r827d73f  
    4848#include <devmap.h>
    4949#include <sys/types.h>
     50#include <sys/typefmt.h>
    5051#include <errno.h>
    5152#include <bool.h>
     
    5657
    5758static const size_t block_size = 512;
     59static aoff64_t num_blocks;
    5860static FILE *img;
    5961
     
    99101{
    100102        int rc;
     103        long img_size;
    101104
    102105        rc = devmap_driver_register(NAME, file_bd_connection);
     
    109112        if (img == NULL)
    110113                return EINVAL;
     114
     115        if (fseek(img, 0, SEEK_END) != 0) {
     116                fclose(img);
     117                return EIO;
     118        }
     119
     120        img_size = ftell(img);
     121        if (img_size < 0) {
     122                fclose(img);
     123                return EIO;
     124        }
     125
     126        num_blocks = img_size / block_size;
    111127
    112128        fibril_mutex_initialize(&dev_lock);
     
    174190                        ipc_answer_1(callid, EOK, block_size);
    175191                        continue;
     192                case BD_GET_NUM_BLOCKS:
     193                        ipc_answer_2(callid, EOK, LOWER32(num_blocks),
     194                            UPPER32(num_blocks));
     195                        continue;
    176196                default:
    177197                        retval = EINVAL;
     
    186206{
    187207        size_t n_rd;
     208        int rc;
     209
     210        /* Check whether access is within device address bounds. */
     211        if (ba + cnt > num_blocks) {
     212                printf(NAME ": Accessed blocks %" PRIuOFF64 "-%" PRIuOFF64 ", while "
     213                    "max block number is %" PRIuOFF64 ".\n", ba, ba + cnt - 1,
     214                    num_blocks - 1);
     215                return ELIMIT;
     216        }
    188217
    189218        fibril_mutex_lock(&dev_lock);
    190219
    191         fseek(img, ba * block_size, SEEK_SET);
     220        clearerr(img);
     221        rc = fseek(img, ba * block_size, SEEK_SET);
     222        if (rc < 0) {
     223                fibril_mutex_unlock(&dev_lock);
     224                return EIO;
     225        }
     226
    192227        n_rd = fread(buf, block_size, cnt, img);
    193228
     
    209244{
    210245        size_t n_wr;
     246        int rc;
     247
     248        /* Check whether access is within device address bounds. */
     249        if (ba + cnt > num_blocks) {
     250                printf(NAME ": Accessed blocks %" PRIuOFF64 "-%" PRIuOFF64 ", while "
     251                    "max block number is %" PRIuOFF64 ".\n", ba, ba + cnt - 1,
     252                    num_blocks - 1);
     253                return ELIMIT;
     254        }
    211255
    212256        fibril_mutex_lock(&dev_lock);
    213257
    214         fseek(img, ba * block_size, SEEK_SET);
    215         n_wr = fread(buf, block_size, cnt, img);
     258        clearerr(img);
     259        rc = fseek(img, ba * block_size, SEEK_SET);
     260        if (rc < 0) {
     261                fibril_mutex_unlock(&dev_lock);
     262                return EIO;
     263        }
     264
     265        n_wr = fwrite(buf, block_size, cnt, img);
    216266
    217267        if (ferror(img) || n_wr < cnt) {
    218268                fibril_mutex_unlock(&dev_lock);
    219269                return EIO;     /* Write error */
     270        }
     271
     272        if (fflush(img) != 0) {
     273                fibril_mutex_unlock(&dev_lock);
     274                return EIO;
    220275        }
    221276
  • uspace/srv/bd/gxe_bd/Makefile

    r918e9910 r827d73f  
    2828#
    2929
    30 include Makefile.common
     30USPACE_PREFIX = ../../..
     31LIBS = $(LIBC_PREFIX)/libc.a
    3132
    32 .PHONY: all clean
     33OUTPUT = gxe_bd
    3334
    34 all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
    35         -[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
    36         $(MAKE) -f Makefile.build
     35SOURCES = \
     36        gxe_bd.c
    3737
    38 clean:
    39         rm -f $(DEPEND) $(DEPEND_PREV) $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm
    40         find . -name '*.o' -follow -exec rm \{\} \;
     38include ../../Makefile.common
  • uspace/srv/bd/gxe_bd/gxe_bd.c

    r918e9910 r827d73f  
    234234                        ipc_answer_1(callid, EOK, block_size);
    235235                        continue;
     236                case BD_GET_NUM_BLOCKS:
     237                        retval = ENOTSUP;
     238                        break;
    236239                default:
    237240                        retval = EINVAL;
  • uspace/srv/bd/part/mbr_part/mbr_part.c

    r918e9910 r827d73f  
    6464#include <devmap.h>
    6565#include <sys/types.h>
     66#include <sys/typefmt.h>
     67#include <inttypes.h>
    6668#include <libblock.h>
    6769#include <devmap.h>
     
    9597        bool present;
    9698        /** Address of first block */
    97         bn_t start_addr;
     99        aoff64_t start_addr;
    98100        /** Number of blocks */
    99         bn_t length;
     101        aoff64_t length;
    100102        /** Device representing the partition (outbound device) */
    101103        dev_handle_t dev;
     
    247249                size_mb = (part->length * block_size + 1024 * 1024 - 1)
    248250                    / (1024 * 1024);
    249                 printf(NAME ": Registered device %s: %llu blocks %llu MB.\n",
    250                     name, part->length, size_mb);
     251                printf(NAME ": Registered device %s: %" PRIuOFF64 " blocks "
     252                    "%" PRIu64 " MB.\n", name, part->length, size_mb);
    251253
    252254                part->dev = dev;
     
    274276        if (brb == NULL) {
    275277                printf(NAME ": Failed allocating memory.\n");
    276                 return ENOMEM; 
     278                return ENOMEM;
    277279        }
    278280
     
    289291        sgn = uint16_t_le2host(brb->signature);
    290292        if (sgn != BR_SIGNATURE) {
    291                 printf(NAME ": Invalid boot record signature 0x%04X.\n", sgn);
     293                printf(NAME ": Invalid boot record signature 0x%04" PRIX16
     294                    ".\n", sgn);
    292295                return EINVAL;
    293296        }
     
    333336                rc = block_read_direct(indev_handle, ba, 1, brb);
    334337                if (rc != EOK) {
    335                         printf(NAME ": Failed reading EBR block at %u.\n", ba);
     338                        printf(NAME ": Failed reading EBR block at %"
     339                            PRIu32 ".\n", ba);
    336340                        return rc;
    337341                }
     
    339343                sgn = uint16_t_le2host(brb->signature);
    340344                if (sgn != BR_SIGNATURE) {
    341                         printf(NAME ": Invalid boot record signature 0x%04X "
    342                             " in EBR at %u.\n", sgn, ba);
     345                        printf(NAME ": Invalid boot record signature 0x%04"
     346                            PRIX16 " in EBR at %" PRIu32 ".\n", sgn, ba);
    343347                        return EINVAL;
    344348                }
     
    463467                        ipc_answer_1(callid, EOK, block_size);
    464468                        continue;
    465 
     469                case BD_GET_NUM_BLOCKS:
     470                        ipc_answer_2(callid, EOK, LOWER32(part->length),
     471                            UPPER32(part->length));
     472                        continue;
    466473                default:
    467474                        retval = EINVAL;
  • uspace/srv/bd/rd/Makefile

    r918e9910 r827d73f  
    2828#
    2929
    30 include Makefile.common
     30USPACE_PREFIX = ../../..
     31LIBS = $(LIBC_PREFIX)/libc.a
    3132
    32 .PHONY: all clean
     33OUTPUT = rd
    3334
    34 all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
    35         -[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
    36         $(MAKE) -f Makefile.build
     35SOURCES = \
     36        rd.c
    3737
    38 clean:
    39         rm -f $(DEPEND) $(DEPEND_PREV) $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm
    40         find . -name '*.o' -follow -exec rm \{\} \;
     38include ../../Makefile.common
  • uspace/srv/bd/rd/rd.c

    r918e9910 r827d73f  
    153153                        ipc_answer_1(callid, EOK, block_size);
    154154                        continue;
     155                case BD_GET_NUM_BLOCKS:
     156                        ipc_answer_2(callid, EOK, LOWER32(rd_size / block_size),
     157                            UPPER32(rd_size / block_size));
     158                        continue;
    155159                default:
    156160                        /*
Note: See TracChangeset for help on using the changeset viewer.