12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /****************************************************************************
- * fs/driver/fs_registerdriver.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
- /****************************************************************************
- * Included Files
- ****************************************************************************/
- #include <nuttx/config.h>
- #include <sys/types.h>
- #include <errno.h>
- #include <nuttx/fs/fs.h>
- #include "inode/inode.h"
- /****************************************************************************
- * Public Functions
- ****************************************************************************/
- /****************************************************************************
- * Name: register_driver
- *
- * Description:
- * Register a character driver inode the pseudo file system.
- *
- * Input Parameters:
- * path - The path to the inode to create
- * fops - The file operations structure
- * mode - inmode privileges (not used)
- * priv - Private, user data that will be associated with the inode.
- *
- * Returned Value:
- * Zero on success (with the inode point in 'inode'); A negated errno
- * value is returned on a failure (all error values returned by
- * inode_reserve):
- *
- * EINVAL - 'path' is invalid for this operation
- * EEXIST - An inode already exists at 'path'
- * ENOMEM - Failed to allocate in-memory resources for the operation
- *
- ****************************************************************************/
- int register_driver(FAR const char *path,
- FAR const struct file_operations *fops,
- mode_t mode, FAR void *priv)
- {
- FAR struct inode *node;
- int ret;
- /* Insert a dummy node -- we need to hold the inode semaphore because we
- * will have a momentarily bad structure.
- */
- ret = inode_semtake();
- if (ret < 0)
- {
- return ret;
- }
- ret = inode_reserve(path, &node);
- if (ret >= 0)
- {
- /* We have it, now populate it with driver specific information.
- * NOTE that the initial reference count on the new inode is zero.
- */
- INODE_SET_DRIVER(node);
- node->u.i_ops = fops;
- #ifdef CONFIG_FILE_MODE
- node->i_mode = mode;
- #endif
- node->i_private = priv;
- ret = OK;
- }
- inode_semgive();
- return ret;
- }
|