1*67de4a93Stkusumi /* $NetBSD: dm_target_zero.c,v 1.32 2020/01/21 16:27:53 tkusumi Exp $ */
2c9d0c62aShaad
3c9d0c62aShaad /*
4c9d0c62aShaad * Copyright (c) 2008 The NetBSD Foundation, Inc.
5c9d0c62aShaad * All rights reserved.
6c9d0c62aShaad *
7c9d0c62aShaad * This code is derived from software contributed to The NetBSD Foundation
8c9d0c62aShaad * by Adam Hamsik.
9c9d0c62aShaad *
10c9d0c62aShaad * Redistribution and use in source and binary forms, with or without
11c9d0c62aShaad * modification, are permitted provided that the following conditions
12c9d0c62aShaad * are met:
13c9d0c62aShaad * 1. Redistributions of source code must retain the above copyright
14c9d0c62aShaad * notice, this list of conditions and the following disclaimer.
15c9d0c62aShaad * 2. Redistributions in binary form must reproduce the above copyright
16c9d0c62aShaad * notice, this list of conditions and the following disclaimer in the
17c9d0c62aShaad * documentation and/or other materials provided with the distribution.
18c9d0c62aShaad *
19c9d0c62aShaad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20c9d0c62aShaad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21c9d0c62aShaad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22c9d0c62aShaad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23c9d0c62aShaad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24c9d0c62aShaad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25c9d0c62aShaad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26c9d0c62aShaad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27c9d0c62aShaad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28c9d0c62aShaad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29c9d0c62aShaad * POSSIBILITY OF SUCH DAMAGE.
30c9d0c62aShaad */
31249cf593Schristos #include <sys/cdefs.h>
32*67de4a93Stkusumi __KERNEL_RCSID(0, "$NetBSD: dm_target_zero.c,v 1.32 2020/01/21 16:27:53 tkusumi Exp $");
33c9d0c62aShaad
34c9d0c62aShaad /*
35c9d0c62aShaad * This file implements initial version of device-mapper zero target.
36c9d0c62aShaad */
37c9d0c62aShaad #include <sys/types.h>
38c9d0c62aShaad #include <sys/param.h>
39c9d0c62aShaad #include <sys/buf.h>
40c9d0c62aShaad
41c9d0c62aShaad #include "dm.h"
42c9d0c62aShaad
43cca8fb31Shaad #ifdef DM_TARGET_MODULE
44cca8fb31Shaad /*
45cca8fb31Shaad * Every target can be compiled directly to dm driver or as a
46cca8fb31Shaad * separate module this part of target is used for loading targets
47cca8fb31Shaad * to dm driver.
48cca8fb31Shaad * Target can be unloaded from kernel only if there are no users of
49cca8fb31Shaad * it e.g. there are no devices which uses that target.
50cca8fb31Shaad */
51cca8fb31Shaad #include <sys/kernel.h>
52cca8fb31Shaad #include <sys/module.h>
53cca8fb31Shaad
542df04240Shaad MODULE(MODULE_CLASS_MISC, dm_target_zero, "dm");
55cca8fb31Shaad
56cca8fb31Shaad static int
dm_target_zero_modcmd(modcmd_t cmd,void * arg)57cca8fb31Shaad dm_target_zero_modcmd(modcmd_t cmd, void *arg)
58cca8fb31Shaad {
59cca8fb31Shaad dm_target_t *dmt;
60cca8fb31Shaad int r;
61cca8fb31Shaad
62cca8fb31Shaad switch (cmd) {
63cca8fb31Shaad case MODULE_CMD_INIT:
6417599f37Shaad if ((dmt = dm_target_lookup("zero")) != NULL) {
6517599f37Shaad dm_target_unbusy(dmt);
66cca8fb31Shaad return EEXIST;
6717599f37Shaad }
68cca8fb31Shaad dmt = dm_target_alloc("zero");
69cca8fb31Shaad
70cca8fb31Shaad dmt->version[0] = 1;
71cca8fb31Shaad dmt->version[1] = 0;
72cca8fb31Shaad dmt->version[2] = 0;
73cca8fb31Shaad dmt->init = &dm_target_zero_init;
74cca8fb31Shaad dmt->strategy = &dm_target_zero_strategy;
75cca8fb31Shaad dmt->destroy = &dm_target_zero_destroy;
76*67de4a93Stkusumi //dmt->upcall = &dm_target_zero_upcall;
77cca8fb31Shaad
78cca8fb31Shaad r = dm_target_insert(dmt);
79cca8fb31Shaad break;
80cca8fb31Shaad
81cca8fb31Shaad case MODULE_CMD_FINI:
82cca8fb31Shaad r = dm_target_rem("zero");
832a2e81e0Shaad
84cca8fb31Shaad break;
85cca8fb31Shaad
86cca8fb31Shaad case MODULE_CMD_STAT:
87cca8fb31Shaad return ENOTTY;
88cca8fb31Shaad
89cca8fb31Shaad default:
90cca8fb31Shaad return ENOTTY;
91cca8fb31Shaad }
92cca8fb31Shaad
93cca8fb31Shaad return r;
94cca8fb31Shaad }
95cca8fb31Shaad #endif
96cca8fb31Shaad
97c9d0c62aShaad /*
98c9d0c62aShaad * Zero target init function. This target doesn't need
99c9d0c62aShaad * target specific config area.
100c9d0c62aShaad */
101c9d0c62aShaad int
dm_target_zero_init(dm_table_entry_t * table_en,int argc,char ** argv)102d14bb027Stkusumi dm_target_zero_init(dm_table_entry_t *table_en, int argc, char **argv)
103c9d0c62aShaad {
104c9d0c62aShaad
105945ce57bStkusumi if (argc != 0) {
106945ce57bStkusumi printf("Zero target takes 0 args, %d given\n", argc);
107945ce57bStkusumi return EINVAL;
108945ce57bStkusumi }
109945ce57bStkusumi
110c9d0c62aShaad printf("Zero target init function called!!\n");
111c9d0c62aShaad
1122cb93e57Stkusumi table_en->target_config = NULL;
113c9d0c62aShaad
114c9d0c62aShaad return 0;
115c9d0c62aShaad }
116249cf593Schristos
117c9d0c62aShaad /*
118c9d0c62aShaad * This routine does IO operations.
119c9d0c62aShaad */
120c9d0c62aShaad int
dm_target_zero_strategy(dm_table_entry_t * table_en,struct buf * bp)121c9d0c62aShaad dm_target_zero_strategy(dm_table_entry_t *table_en, struct buf *bp)
122c9d0c62aShaad {
123c9d0c62aShaad
124c9d0c62aShaad memset(bp->b_data, 0, bp->b_bcount);
125c9d0c62aShaad bp->b_resid = 0; /* nestiobuf_done wants b_resid = 0 to be sure
126293fc006Shaad * that there is no other io to done */
127c9d0c62aShaad biodone(bp);
128c9d0c62aShaad
129c9d0c62aShaad return 0;
130c9d0c62aShaad }
131249cf593Schristos
132d3a7c35fSagc /* Does not need to do anything here. */
133c9d0c62aShaad int
dm_target_zero_destroy(dm_table_entry_t * table_en)134c9d0c62aShaad dm_target_zero_destroy(dm_table_entry_t *table_en)
135c9d0c62aShaad {
13646f14759Stkusumi
13778284dcaShaad /* Unbusy target so we can unload it */
13878284dcaShaad dm_target_unbusy(table_en->target);
13978284dcaShaad
140c9d0c62aShaad return 0;
141c9d0c62aShaad }
142249cf593Schristos
143*67de4a93Stkusumi #if 0
144e9921331Smsaitoh /* Unsupported for this target. */
145c9d0c62aShaad int
146c9d0c62aShaad dm_target_zero_upcall(dm_table_entry_t *table_en, struct buf *bp)
147c9d0c62aShaad {
14846f14759Stkusumi
149c9d0c62aShaad return 0;
150c9d0c62aShaad }
151*67de4a93Stkusumi #endif
152