Changeset 94e46c9 in mainline for uspace/lib


Ignore:
Timestamp:
2015-05-23T04:09:11Z (11 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b5143bd
Parents:
a25d893 (diff), 0683992 (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:

Mainline changes

Location:
uspace/lib
Files:
18 added
13 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/dhcp.c

    ra25d893 r94e46c9  
    8484}
    8585
     86int dhcp_discover(sysarg_t link_id)
     87{
     88        async_exch_t *exch = async_exchange_begin(dhcp_sess);
     89
     90        int rc = async_req_1_0(exch, DHCP_DISCOVER, link_id);
     91        async_exchange_end(exch);
     92
     93        return rc;
     94}
     95
    8696/** @}
    8797 */
  • uspace/lib/c/generic/irq.c

    ra25d893 r94e46c9  
    3535#include <ipc/irq.h>
    3636#include <libc.h>
     37#include <stdlib.h>
     38#include <macros.h>
     39
     40static irq_cmd_t default_cmds[] = {
     41        {
     42                .cmd = CMD_ACCEPT
     43        }
     44};
     45
     46static const irq_code_t default_ucode = {
     47        0,
     48        NULL,
     49        ARRAY_SIZE(default_cmds),
     50        default_cmds
     51};
    3752
    3853/** Subscribe to IRQ notification.
     
    4964    const irq_code_t *ucode)
    5065{
     66        if (ucode == NULL)
     67                ucode = &default_ucode;
     68       
    5169        return __SYSCALL4(SYS_IPC_IRQ_SUBSCRIBE, inr, devno, method,
    5270            (sysarg_t) ucode);
  • uspace/lib/c/include/inet/dhcp.h

    ra25d893 r94e46c9  
    4141extern int dhcp_link_add(sysarg_t);
    4242extern int dhcp_link_remove(sysarg_t);
     43extern int dhcp_discover(sysarg_t);
    4344
    4445#endif
  • uspace/lib/c/include/ipc/dev_iface.h

    ra25d893 r94e46c9  
    4848        /** Network interface controller interface */
    4949        NIC_DEV_IFACE,
     50               
     51        /** IEEE 802.11 interface controller interface */
     52        IEEE80211_DEV_IFACE,
    5053       
    5154        /** Interface provided by any PCI device. */
  • uspace/lib/c/include/ipc/dhcp.h

    ra25d893 r94e46c9  
    4141typedef enum {
    4242        DHCP_LINK_ADD = IPC_FIRST_USER_METHOD,
    43         DHCP_LINK_REMOVE
     43        DHCP_LINK_REMOVE,
     44        DHCP_DISCOVER
    4445} dhcp_request_t;
    4546
  • uspace/lib/drv/Makefile

    ra25d893 r94e46c9  
    4848        generic/remote_char_dev.c \
    4949        generic/remote_nic.c \
     50        generic/remote_ieee80211.c \
    5051        generic/remote_usb.c \
    5152        generic/remote_pci.c \
  • uspace/lib/drv/generic/dev_iface.c

    ra25d893 r94e46c9  
    4646#include "remote_battery_dev.h"
    4747#include "remote_nic.h"
     48#include "remote_ieee80211.h"
    4849#include "remote_usb.h"
    4950#include "remote_usbhc.h"
     
    6263                [CHAR_DEV_IFACE] = &remote_char_dev_iface,
    6364                [NIC_DEV_IFACE] = &remote_nic_iface,
     65                [IEEE80211_DEV_IFACE] = &remote_ieee80211_iface,
    6466                [PCI_DEV_IFACE] = &remote_pci_iface,
    6567                [USB_DEV_IFACE] = &remote_usb_iface,
  • uspace/lib/drv/generic/interrupt.c

    ra25d893 r94e46c9  
    4444#include "private/driver.h"
    4545
    46 static irq_cmd_t default_cmds[] = {
    47         {
    48                 .cmd = CMD_ACCEPT
    49         }
    50 };
    51 
    52 static const irq_code_t default_pseudocode = {
    53         0,
    54         NULL,
    55         ARRAY_SIZE(default_cmds),
    56         default_cmds
    57 };
    58 
    5946int register_interrupt_handler(ddf_dev_t *dev, int irq,
    6047    interrupt_handler_t *handler, const irq_code_t *pseudocode)
  • uspace/lib/ext4/libext4_directory.c

    ra25d893 r94e46c9  
    390390            (ext4_inode_has_flag(parent->inode, EXT4_INODE_FLAG_INDEX))) {
    391391                int rc = ext4_directory_dx_add_entry(parent, child, name);
    392                
     392
    393393                /* Check if index is not corrupted */
    394                 if (rc != EXT4_ERR_BAD_DX_DIR) {
    395                         if (rc != EOK)
    396                                 return rc;
    397                        
    398                         return EOK;
    399                 }
    400                
     394                if (rc != EXT4_ERR_BAD_DX_DIR)
     395                        return rc;
     396
    401397                /* Needed to clear dir index flag if corrupted */
    402398                ext4_inode_clear_flag(parent->inode, EXT4_INODE_FLAG_INDEX);
  • uspace/lib/ext4/libext4_extent.c

    ra25d893 r94e46c9  
    797797                        if (rc != EOK) {
    798798                                ext4_balloc_free_block(inode_ref, fblock);
     799                                block_put(block);
    799800                                return rc;
    800801                        }
  • uspace/lib/ext4/libext4_filesystem.c

    ra25d893 r94e46c9  
    5353    enum cache_mode cmode)
    5454{
     55        ext4_superblock_t *temp_superblock = NULL;
     56
    5557        fs->device = service_id;
    56        
     58
    5759        /* Initialize block library (4096 is size of communication channel) */
    5860        int rc = block_init(EXCHANGE_SERIALIZE, fs->device, 4096);
    5961        if (rc != EOK)
    60                 return rc;
    61        
     62                goto err;
     63
    6264        /* Read superblock from device to memory */
    63         ext4_superblock_t *temp_superblock;
    6465        rc = ext4_superblock_read_direct(fs->device, &temp_superblock);
    65         if (rc != EOK) {
    66                 block_fini(fs->device);
    67                 return rc;
    68         }
    69        
     66        if (rc != EOK)
     67                goto err_1;
     68
    7069        /* Read block size from superblock and check */
    7170        uint32_t block_size = ext4_superblock_get_block_size(temp_superblock);
    7271        if (block_size > EXT4_MAX_BLOCK_SIZE) {
    73                 block_fini(fs->device);
    74                 return ENOTSUP;
    75         }
    76        
     72                rc = ENOTSUP;
     73                goto err_1;
     74        }
     75
    7776        /* Initialize block caching by libblock */
    7877        rc = block_cache_init(service_id, block_size, 0, cmode);
    79         if (rc != EOK) {
    80                 block_fini(fs->device);
    81                 return rc;
    82         }
    83        
     78        if (rc != EOK)
     79                goto err_1;
     80
    8481        /* Compute limits for indirect block levels */
    8582        uint32_t block_ids_per_block = block_size / sizeof(uint32_t);
     
    9289                    fs->inode_blocks_per_level[i];
    9390        }
    94        
     91
    9592        /* Return loaded superblock */
    9693        fs->superblock = temp_superblock;
    97        
     94
    9895        uint16_t state = ext4_superblock_get_state(fs->superblock);
    99        
     96
    10097        if (((state & EXT4_SUPERBLOCK_STATE_VALID_FS) !=
    10198            EXT4_SUPERBLOCK_STATE_VALID_FS) ||
    10299            ((state & EXT4_SUPERBLOCK_STATE_ERROR_FS) ==
    103100            EXT4_SUPERBLOCK_STATE_ERROR_FS)) {
    104                 block_cache_fini(fs->device);
    105                 block_fini(fs->device);
    106                 return ENOTSUP;
    107         }
    108        
     101                rc = ENOTSUP;
     102                goto err_2;
     103        }
     104
    109105        /* Mark system as mounted */
    110106        ext4_superblock_set_state(fs->superblock, EXT4_SUPERBLOCK_STATE_ERROR_FS);
    111107        rc = ext4_superblock_write_direct(fs->device, fs->superblock);
    112         if (rc != EOK) {
    113                 block_cache_fini(fs->device);
    114                 block_fini(fs->device);
    115                 return rc;
    116         }
    117        
     108        if (rc != EOK)
     109                goto err_2;
     110
    118111        uint16_t mnt_count = ext4_superblock_get_mount_count(fs->superblock);
    119112        ext4_superblock_set_mount_count(fs->superblock, mnt_count + 1);
    120        
     113
    121114        return EOK;
     115
     116err_2:
     117        block_cache_fini(fs->device);
     118err_1:
     119        block_fini(fs->device);
     120err:
     121        if (temp_superblock)
     122                ext4_superblock_release(temp_superblock);
     123        return rc;
    122124}
    123125
     
    845847                               
    846848                                rc = block_put(subblock);
    847                                 if (rc != EOK)
     849                                if (rc != EOK) {
     850                                        block_put(block);
    848851                                        return rc;
     852                                }
    849853                        }
    850854                       
  • uspace/lib/ext4/libext4_superblock.c

    ra25d893 r94e46c9  
    11781178}
    11791179
     1180/** Release the memory allocated for the superblock structure
     1181 *
     1182 * @param sb         Superblock to be freed
     1183 *
     1184 */
     1185void ext4_superblock_release(ext4_superblock_t *sb)
     1186{
     1187        free(sb);
     1188}
     1189
    11801190/** Check sanity of the superblock.
    11811191 *
  • uspace/lib/ext4/libext4_superblock.h

    ra25d893 r94e46c9  
    145145extern int ext4_superblock_read_direct(service_id_t, ext4_superblock_t **);
    146146extern int ext4_superblock_write_direct(service_id_t, ext4_superblock_t *);
     147extern void ext4_superblock_release(ext4_superblock_t *);
    147148extern int ext4_superblock_check_sanity(ext4_superblock_t *);
    148149
Note: See TracChangeset for help on using the changeset viewer.